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

时间:2010-08-05 14:39:56

标签: oop dependency-injection solid-principles

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

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

2 个答案:

答案 0 :(得分:11)

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

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

或许可能你可能想要注入异常的一些合理理由,例如设计一个异常处理组件,它在记录,包装等之后重新抛出异常,或者可能在构建异常本身需要外部资源来实现(虽然这种需要本身会让我暂停),但总的来说,我不会说你应该将组件如何从组件本身报告其故障状态。

答案 1 :(得分:4)

这听起来有点矫枉过正。

当抛出异常时,它应该通过其消息和类型提供某种有用的信息。

如果要注入要使用的Exception类,这意味着Exception的类型不再有用,可以找出问题的真正原因(因为您已经注入了类型,因此已经知道了类型)。

相关问题