c# - 如何减少 Controller 和业务层服务中构造函数参数的数量?

标签 c# architecture mediator business-logic-layer domainservices

这是 this SO post 的重新措辞.

我发现使用中介模式可以有效减少 Controller 中的参数数量。

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

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

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

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

最佳答案

太多的构造函数参数会产生代码异味,并且通常表示违反了单一职责原则 - 因此您需要注意 SOLID 中的“S”代码库。

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

改善“太多依赖项”的情况

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

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

  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.

关于c# - 如何减少 Controller 和业务层服务中构造函数参数的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40359513/

相关文章:

c# - BackgroundWorker 中仅更新了 2 个进度条中的 1 个

c# - 在 c# 或 c++ 中使用更快的时钟加速应用程序

c# - 从 Android 中的 ASPX 页面获取响应

javascript - 在Angular 5中将AMP与Material Design Lite一起使用

c# - ASP.NET 和 Java Web 应用程序的相似之处

events - DDD 使用 NoSQL 处理限界上下文中多个聚合的最终一致性

javascript - 0.9.9 中的 Backbone 对象现在可以用作中介替代品吗?

c# - 在 ViewModel 之间共享集合

c# - 如何在 C# 中使用 bigint?

c# - 使用 ASP.NET 选择所有图像