Domain driven design 如何处理DDD w/Clean体系结构中具有太多依赖参数的用例交互构造函数?

Domain driven design 如何处理DDD w/Clean体系结构中具有太多依赖参数的用例交互构造函数?,domain-driven-design,repository-pattern,clean-architecture,Domain Driven Design,Repository Pattern,Clean Architecture,使用DDD w/Clean体系结构,我首先实例化我的所有依赖项(例如存储库和服务),并将它们注入到我的用例中。随着时间的推移,我注意到我的每个用例的依赖项列表随着时间的推移变得相当大。例如,我的用例使用3个聚合根,因此我有3个存储库。还不错。但是,当我添加更多的特性时,我发现自己添加了域服务或更多的存储库,并且不得不将它们注入到用例构造函数中。在用例交互器中有10个以上的参数可以吗?我一直认为拥有2-3个以上的参数是一种代码味道。有没有更好的方法来处理这个问题?提前感谢您。构造函数中有许多依赖项

使用DDD w/Clean体系结构,我首先实例化我的所有依赖项(例如存储库和服务),并将它们注入到我的用例中。随着时间的推移,我注意到我的每个用例的依赖项列表随着时间的推移变得相当大。例如,我的用例使用3个聚合根,因此我有3个存储库。还不错。但是,当我添加更多的特性时,我发现自己添加了域服务或更多的存储库,并且不得不将它们注入到用例构造函数中。在用例交互器中有10个以上的参数可以吗?我一直认为拥有2-3个以上的参数是一种代码味道。有没有更好的方法来处理这个问题?提前感谢您。

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

你可以在这里找到很好的例子:

在Mark Seemann的Facade服务示例中,谁负责实例化Facade服务的依赖项并将其注入Facade服务构造函数?它看起来像这样吗?
OrderValidator=newordervalidator()
OrderShipper=新的OrderShipper()
RateExchange=新的RateExchange()
UserContext=new UserContext()
OrderCollector=新的OrderCollector(RateExchange,UserContext)
OrderProcessor=新的OrderProcessor(OrderValidator、OrderShipper、OrderCollector)
我猜他使用了一些IOC容器。我没有使用IOC容器。有没有关于如何在没有IOC容器的情况下处理这个问题的建议?就像你建议的那样。