Следует ли внедрять исключения при внедрении зависимостей?

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

Это хорошая практика или излишество?

11
задан Ian Ringrose 18 October 2010 в 12:52
поделиться

2 ответа

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

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

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

11
ответ дан 3 December 2019 в 08:02
поделиться

Звучит как перебор.

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

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

4
ответ дан 3 December 2019 в 08:02
поделиться