如何减少控制器和业务层服务中的构造函数参数数量?

How do I reduce the number of constructor parameters in controllers and business layer services?

这是 this SO post 的重新措辞。

我发现使用调解器模式可以有效地减少控制器中的参数数量。

然后我开始怀疑这是否是情感域服务。

但这不会隐藏服务的依赖关系吗?

我记得在某处读到,如果我有一堆依赖项被注入,我可能有一个更大的领域概念,可以封装在它自己的服务中。我发现这是一种有效的模式。

那么,如何减少业务层服务中的构造函数参数个数呢?

过多的构造函数参数是一种代码味道,通常表明违反了单一责任原则 - 所以你需要小心"S" 在您的 SOLID 代码库中。

构造函数参数是一个依赖项。通过 "solving" 调解器的问题,您仍将拥有相同数量的依赖项,只是构造函数参数更少。您实质上是从可见的 SRP 代码气味转变为隐藏的 SRP 代码气味 - 并不是真正的进步。

改善 "too many dependencies" 情况

This blog post 讨论了这个确切的问题并用一个例子来支持它。

改善您的情况的基本方法是找到围绕一组依赖项聚集的代码并将该代码提取到新服务中 class:

  1. Analyze how dependencies interact to identify clusters of behavior.
  2. Extract an interface from these clusters.
  3. Copy the original implementation to a class that implements the new interface.
  4. Inject the new interface into the consumer.
  5. Replace the original implementation with a call the new dependency.
  6. Remove the redundant dependencies.