我读到应用程序服务用于编排,它们处理应用程序的工作流程。
例如:在将钱从用户A转移到用户B后,系统必须发送电子邮件。
因此,应用程序服务调用域实体,域服务来处理域逻辑。然后致电基础设施发送电子邮件然后,应用层依赖于域层和基础架构层。它会违反DDD吗?应用层是否应该依赖于DDD中的基础设施层?
答案 0 :(得分:3)
应用层是否应该依赖于DDD中的基础设施层?
我相信您正在寻找的模式是"服务提供商"。
应用程序组件将定义它需要满足的接口/ api / contract以履行其自己的职责
基础架构组件提供此接口的实现
组合根创建基础结构组件,然后使用它来创建应用程序组件。
在应用程序的自动化测试中,您可能会包含域组件,但用测试双重替换基础架构组件。
答案 1 :(得分:1)
在考虑分层体系结构时,通常存在严格或轻松的分层体系结构之间的区别。
在宽松的分层方法中,“允许”一层访问任何下层,而不仅仅是下面的层(这将是严格的方法)。
在我个人看来,转发的方法是实用的,并且完全可以使用DDD - 不应该与图层教条。
我们举例决定放松的方法,并按照你描述的方式使用它。从应用程序服务中,我们通过利用域层的构建块以及基础架构组件(即用于电子邮件等通知)来协调用例。
PS:以上只是作为一般澄清,如果它违反了DDD。当然,您应该在技术上通过使用DI来防止层的紧密耦合,可能还有策略模式,......
答案 2 :(得分:1)
Should application layer depend on infrastructure layer in DDD?
是的,你可以!应用服务声明对执行域逻辑所需的基础设施服务的依赖。
但是如果你可以通过使用接口来避免它,那么更多的隔离(端口、适配器)会更好
答案 3 :(得分:0)
我认为这不会违反任何DDD原则,但我不是DDD纯粹主义者,所以我不确定。
也许这会有所帮助:http://dddsample.sourceforge.net/architecture.html
"除了三个垂直层外,还有基础设施。如图所示,它以不同的方式支持所有三个层,促进层之间的通信。"
我认为电子邮件服务将被视为外部服务,因此属于基础架构。