我的团队正在使用自制的 DI 容器在 PHP 项目中实现依赖注入。我们对 DI 的第一次迭代可能被带到了极端,甚至将异常注入到依赖它们的类中。
这是一个好习惯还是矫枉过正?
我的团队正在使用自制的 DI 容器在 PHP 项目中实现依赖注入。我们对 DI 的第一次迭代可能被带到了极端,甚至将异常注入到依赖它们的类中。
这是一个好习惯还是矫枉过正?
依赖注入的目的是颠倒获取依赖关系的责任,这些依赖关系是对象用来促进配置或协作行为的协作者。
通常,例外是给定类的合同所固有的。也就是说,异常是组件在发生故障时如何表现的隐式或显式契约的一部分,因此不适合用衍生工具切换出来。事件通常也没有行为,因此为了测试隔离而抽象它们也不是特别有价值。此外,由于事件通常只表示故障状态或事件,因此能够注入异常的派生也不是特别有价值,因为组件的任何消费者都需要针对基本异常合同进行编码(即任何附加属性都不会可见)。
您可能需要注入异常的一些正当理由,例如设计一个异常处理组件,该组件在记录、包装等之后重新抛出异常,或者异常的构造本身需要外部资源来实现(尽管这种需要本身会让我停下来),但总的来说,我不会说您应该将组件报告其故障状态的方式与组件本身分离。
这听起来有点矫枉过正。
当抛出异常时,它应该通过其消息和类型提供某种有用的信息。
如果您要注入要使用的 Exception 类,这意味着 Exception 的类型在找出问题的真正原因时不再有用(因为自从注入它以来您已经知道类型)。