Baranov_Dron
Новичок
Здравствуйте!
Озаботился вопросом эксепшенов и обработки ошибок.
Да, с одной стороны выбросить исключение легко throw, словить ещё легче catch.
И про них куча мусолят в куче книг, не говоря о главном.
Как они должна обрабатываться в ООП коде.
Например самый главный вопрос как должны обрабатываться эксепшены в вложенных иерархиях.
Например в примере выше SplFileObject выбрасывает эксепшен RuntimeException.
И из-за этого класса у нас возникает куча обработчиков эксепшенов! На каждом уровне!
Что ужасно ухудшает читаемость кода! И делает его громоздким.
Стоит ли в main(иди как это называется...) просто ловить эксепшен RuntimeException,
а от ComponentOneException и FacadeException просто напросто избавится?
Честно говоря я не мало гуглил, и смотрел книги, но нигде темы "протяжки" исключений через слои я не нашёл.
Посоветуйте в словах, ссылками на статьи или книги - как правильно и где правильно обрабатывать исключения...
Озаботился вопросом эксепшенов и обработки ошибок.
Да, с одной стороны выбросить исключение легко throw, словить ещё легче catch.
И про них куча мусолят в куче книг, не говоря о главном.
Как они должна обрабатываться в ООП коде.
Например самый главный вопрос как должны обрабатываться эксепшены в вложенных иерархиях.
PHP:
<?php
class ComponentOneException extends Exception
{}
class FacadeException extends Exception
{}
class ComponentOne
{
public function getResult()
{
$result = '';
try
{
$file = new SplFileObject('file_one.txt');
foreach ($file as $line)
{
$result .= $line;
}
}
catch (RuntimeException $e)
{
throw new ComponentOneException($e);
}
return $result;
}
}
class ComponentTwo
{}
class ComponentThree
{}
class Facade
{
public function run()
{
try
{
$one = new ComponentOne();
//Работа с компонентом один.
echo $one->getResult();
}
catch(ComponentOneException $e)
{
throw new FacadeException($e);
}
$one = new ComponentTwo();
//Работа с компонентом два.
$one = new ComponentThree();
//Работа с компонентом три.
}
}
try
{
$facade = new Facade();
$facade->run();
}
catch (FacadeException $e)
{
//Обработка.
}
?>
И из-за этого класса у нас возникает куча обработчиков эксепшенов! На каждом уровне!
Что ужасно ухудшает читаемость кода! И делает его громоздким.
Стоит ли в main(иди как это называется...) просто ловить эксепшен RuntimeException,
а от ComponentOneException и FacadeException просто напросто избавится?
Честно говоря я не мало гуглил, и смотрел книги, но нигде темы "протяжки" исключений через слои я не нашёл.
Посоветуйте в словах, ссылками на статьи или книги - как правильно и где правильно обрабатывать исключения...