【问题标题】:IoC in Domain Layer领域层中的 IoC
【发布时间】:2019-03-03 20:56:10
【问题描述】:

在我的域层中,我有合同 Hashing。我的一项域服务依赖于这份合同。目前我已将其注入到 __construct 方法中。

在基础设施层我有这个合同的实施。我写了一些看起来像 IoC 容器的东西,它通过自动布线注入创建服务。

一切正常。但我知道服务的依赖关系会增长。我会为他们添加更多的UseCases。还有一个问题——容器注入了所有的依赖,但是我们只能使用一个UseCase,所以它会做多余的工作。

可以吗,如果我将注入 IoC 容器本身而不是许多参数,并在 UseCases 中使用它。

IoC 合约也位于领域层合约命名空间中

【问题讨论】:

    标签: php dependency-injection interface architecture inversion-of-control


    【解决方案1】:

    可以吗,如果我将注入 IoC 容器本身而不是许多参数

    不,这不好。为您的Composition Root 之外的任何类提供对无限依赖集的访问权限被视为反模式。这种反模式称为Service Locator

    注入容器会导致类依赖冗余组件(容器)并使其不明显类的依赖项是什么。这会使测试复杂化,并使该类对其复杂程度不诚实。

    您可能想注入容器以防止类的构造函数不断变化,但这是另一个问题的迹象。不断获得新依赖的类可能违反了Single Responsibility Principle。你最终会得到带有许多构造函数参数的类——一种叫做Constructor over-injection的代码味道。

    【讨论】:

      猜你喜欢
      • 2022-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      相关资源
      最近更新 更多