在实现依赖注入时,是否应该注入异常?

DRo*_*ock 11 oop dependency-injection solid-principles

我的团队在使用自制的DI容器在PHP项目中实现依赖注入时感到困惑.我们对DI的第一次迭代可能是极端的,甚至异常也被注入依赖于它们的类中.

这是一个好习惯还是矫枉过正?

Der*_*eer 11

依赖注入的目的是颠倒获取依赖关系的责任,这些依赖关系是对象使用的协作者以促进配置或协作行为.

一般而言,例外是特定类别合同所固有的.也就是说,异常是组件在发生故障时如何表现的隐式或显式合同的一部分,因此不适合用衍生工具切换.事件通常也没有行为,因此为了测试隔离而抽象它们也不是特别有价值.此外,因为事件通常仅代表故障状态或事件,所以能够注入异常的衍生物也不是特别有价值,因为组件的任何消费者都需要针对基本异常合同进行编码(即,任何其他属性都不会可见).

可能是你可能要注入的异常,如与日志记录,包装等后重新抛出异常,或异常处理组件的设计几个正当的理由也许在异常本身的构造需要外部资源,实现(虽然这种需要本身会让我停下来),但总的来说,我不会说你应该将组件如何从组件本身报告其故障状态.