在领域驱动设计中,服务可以调用其他服务吗?

Ext*_*kun 5 language-agnostic domain-driven-design

有时,我正在编码的某些服务需要另一个服务已实现的功能。例如,在编写一个服务,在单次交易后返回某个ID的用户购买的产品,我需要用户购买产品后的帐户余额,因此我调用另一个服务来获取数据。

我可以看到一些替代方案:

  1. 这样做很好,因为您正在重用代码。

  2. 服务应该访问自己的存储库以检索其操作的数据

  3. 服务应该相互隔离,并且只属于一个域。在我的例子中,我应该有另一个层,可能是一个 ViewFactory,来调用服务来获取相关数据

在这个问题上普遍接受的规范是什么?

Dmi*_*try 6

您的问题是关于域服务,而不是应用程序或基础设施服务?如果是这样,DDD 没有关于将域服务彼此隔离的具体指南。使用您的判断并注意SOLID违规。还要记住,域服务经常被滥用,将更多的逻辑放入 Entities是有意义的:

应该明智地使用 SERVICES,并且不允许剥夺其所有行为的实体和价值对象。