При внедрении внедрения зависимостей должны ли вводиться исключения? - PullRequest
10 голосов
/ 05 августа 2010

Моя команда путается в реализации внедрения зависимостей в PHP-проекте с использованием домашнего DI-контейнера.Наша первая итерация DI, возможно, была доведена до крайности, и даже исключения вводятся в классы, которые зависят от них.

Это хорошая практика или перебор?

Ответы [ 2 ]

11 голосов
/ 06 августа 2010

Цель внедрения зависимостей состоит в том, чтобы инвертировать ответственность за получение зависимостей, которые являются соавторами, используемыми объектом для облегчения конфигурации или совместного поведения.

Как правило, исключения присущи договору данного класса. То есть исключения являются частью неявного или явного договора о том, как компонент ведет себя в случае сбоя, и, следовательно, не допускает переключения с производными. События также обычно не имеют поведения, поэтому абстрагирование их с целью изоляции теста также не представляет особой ценности. Кроме того, поскольку события, как правило, представляют только состояние отказа или событие, возможность вставлять производные исключения также не представляет особой ценности, так как любые потребители компонента должны будут кодировать в соответствии с базовым контрактом исключения (то есть любые дополнительные свойства не будут быть увиденным).

Существует , возможно, несколько законных причин, по которым вы можете захотеть внедрить исключение, например, при разработке компонента обработки исключений, который перебрасывает исключения после записи в журнал, переноса и т. Д., Или, возможно, при создании само по себе исключение требует внешних ресурсов для достижения (хотя эта потребность сама по себе заставит меня задуматься), но в целом я бы не сказал, что вы должны отделить то, как компонент сообщает о своих состояниях отказа от самих компонентов.

4 голосов
/ 05 августа 2010

Звучит как излишний перебор.

Когда создается исключение, оно должно предоставлять некоторую полезную информацию через свое сообщение и тип.

Если вы вводите класс Exception для использования, это означает, что тип Exception больше не нужен для выяснения, в чем действительно заключается проблема (поскольку вы уже знаете тип с тех пор, как внедрили его).

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