【问题标题】:How to handle UseCase Interactor constructors that have too many dependency parameters in DDD w/ Clean Architecture?如何在 DDD w/ Clean Architecture 中处理具有太多依赖参数的 UseCase Interactor 构造函数?
【发布时间】:2018-01-07 20:15:35
【问题描述】:

使用带有清洁架构的 DDD,我首先实例化所有依赖项(例如存储库和服务)并将它们注入到我的用例中。随着时间的推移,我注意到我对每个 UseCase 的依赖项列表随着时间的推移变得非常大。例如,我的 UseCase 使用 3 个聚合根,所以我有 3 个存储库。没那么糟糕。但是,随着我添加更多功能,我发现自己添加了域服务或更多存储库,并且还必须将它们注入到 UseCase 构造函数中。在用例交互器中可以有 10 多个参数吗?我一直认为超过 2-3 个参数是一种代码味道。有没有更好的方法来处理这个?提前谢谢你。

【问题讨论】:

    标签: domain-driven-design repository-pattern clean-architecture


    【解决方案1】:

    在构造函数中有许多依赖项绝对是代码异味。这不是很容易处理,而且通常更多的是经验和技能的问题,但基本上你需要从不同的角度看待你的系统,并检查某些服务/聚合是否可以被新的替换(合并),这取决于在你的旧人身上。比这个新的最终证明在您系统的其他地方也有用,因此您将减少代码重复性。您必须遵循 SRP。

    你可以在这里找到很好的例子: http://blog.ploeh.dk/2010/02/02/RefactoringtoAggregateServices/

    【讨论】:

    • 在 Mark Seemann 的 Facade Service 示例中,谁负责实例化 Facade Service 的依赖关系并将它们注入到 Facade Service 构造函数中?会是这个样子吗?
      OrderValidator = new OrderValidator();<br/> OrderShipper = new OrderShipper();<br/> RateExchange = new RateExchange();<br/> UserContext = new UserContext(); <br/> OrderCollector = new OrderCollector(RateExchange, UserContext);<br/> OrderProcessor = new OrderProcessor(OrderValidator, OrderShipper, OrderCollector);<br/>
    • 我猜他使用了一些 IOC 容器。
    • 我没有使用 IOC 容器。关于如何在没有 IOC 容器的情况下处理此问题的任何建议?
    • 那么就像你提议的那样。
    猜你喜欢
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多