Должно ли сообщество PHP начать использовать более описательные исключения? - PullRequest
2 голосов
/ 18 апреля 2010

Я много работаю с Zend Framework и только что взглянул на Kohana, и мне кажется странным, что это типичный сценарий в этих средах:

throw Some_Components_Exception( 'invalid argument' );

Там, где я считаю, это было бы не намного полезнее:

throw Some_Components_InvalidArgumentException( 'whatever discription' );

Потому что его легче поймать.

Я подозреваю, но сразу признаю, что это предвзято, что первая практика распространена в сообществе PHP. Стоит ли нам, сообществу PHP, больше использовать эти описательные типы ожиданий?

1 Ответ

3 голосов
/ 18 апреля 2010

Да, я бы порекомендовал использовать подтипы исключений, предоставляемые SPL. Это позволяет вызывать код (либо в рамках, либо в вашем приложении) для обработки различных типов исключений по-разному.

A DomainException может указывать на недопустимый пользовательский ввод, о котором вы должны сообщить пользователю и дать ему возможность повторно ввести данные. BadMethodCallException может указывать на недостаток в вашем коде, и вы должны зарегистрировать его и обработать другим способом.

Но эти разные сценарии исключений не имеют ничего общего с классом или компонентом, вызвавшим исключение. BadMethodCallException, вероятно, следует обрабатывать аналогичным образом, независимо от того, происходит ли это в компоненте MVC или на уровне доступа к БД.

Я был руководителем проекта на Zend Framework в версии 1.0. Я хотел реорганизовать иерархию исключений и подумал, что было произвольным решением (до моего присоединения к проекту) использовать одно исключение для каждого компонента. Это не имело смысла.

К сожалению, реорганизация исключений была не так важна, как доведение продукта до уровня выпуска 1.0. Я должен был следовать приоритету по графику, который Zend установил для проекта, и для этого нужно было отложить практически все, что не требовалось строго для выпуска полной версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...