oop - 在实现依赖注入(inject)的时候,应该注入(inject)异常吗?

标签 oop dependency-injection solid-principles

我的团队正在使用自制的 DI 容器在 PHP 项目中实现依赖注入(inject)。我们对 DI 的第一次迭代可能被带到了极端,甚至将异常注入(inject)到依赖它们的类中。

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

最佳答案

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

通常,异常(exception)是给定类的契约(Contract)所固有的。也就是说,异常是组件在发生故障时如何表现的隐式或显式契约的一部分,因此不适合用衍生工具切换出来。事件通常也没有行为,因此为了测试隔离而抽象它们也不是特别有值(value)。此外,由于事件通常只表示故障状态或事件,因此能够注入(inject)异常的派生也不是特别有值(value),因为组件的任何消费者都需要针对基本异常契约(Contract)进行编码(即任何附加属性都不会可见)。

您可能需要注入(inject)异常的一些正当理由,例如设计一个异常处理组件,该组件在记录、包装等之后重新抛出异常,或者异常的构造本身需要外部资源来实现(尽管这种需要本身会让我停下来),但总的来说,我不会说您应该将组件报告其故障状态的方式与组件本身分离。

关于oop - 在实现依赖注入(inject)的时候,应该注入(inject)异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3415823/

相关文章:

java - 任何不良使用界面的例子?

c# - 如何通过 ASP.NET Core 中的依赖注入(inject)获取对 IHostedService 的引用?

java - 依赖项更改时强制类重新编译

java - 单一职责原则 - 我的类(class)

swift - 使用 Swift 的 didSet 访问器,我是否仍然需要隐藏对属性的访问

C++调用公共(public)基类的私有(private)/ protected 函数

PHP 'instanceof' 类常量失败

c# - 使用开放的泛型类型将实现多个接口(interface)的服务注册为单例

java - 尝试编写 Spring Batch 单元测试时出现 NoSuchBeanDefinitionException

oop - SOLID - 单一职责原则和开放/封闭原则是否相互排斥?