Да, я бы порекомендовал использовать подтипы исключений, предоставляемые SPL. Это позволяет вызывать код (либо в рамках, либо в вашем приложении) для обработки различных типов исключений по-разному.
A DomainException
может указывать на недопустимый пользовательский ввод, о котором вы должны сообщить пользователю и дать ему возможность повторно ввести данные. BadMethodCallException
может указывать на недостаток в вашем коде, и вы должны зарегистрировать его и обработать другим способом.
Но эти разные сценарии исключений не имеют ничего общего с классом или компонентом, вызвавшим исключение. BadMethodCallException
, вероятно, следует обрабатывать аналогичным образом, независимо от того, происходит ли это в компоненте MVC или на уровне доступа к БД.
Я был руководителем проекта на Zend Framework в версии 1.0. Я хотел реорганизовать иерархию исключений и подумал, что было произвольным решением (до моего присоединения к проекту) использовать одно исключение для каждого компонента. Это не имело смысла.
К сожалению, реорганизация исключений была не так важна, как доведение продукта до уровня выпуска 1.0. Я должен был следовать приоритету по графику, который Zend установил для проекта, и для этого нужно было отложить практически все, что не требовалось строго для выпуска полной версии.