我有一个带有复杂模型的“Process”应用程序(这里简化)。该应用程序具有以下Web服务:
Webservice | Application behind webservice
------------------------------------------------------
ProcessDTO | Process
.getLabel() | .getLabel()
| .getSubComponents()
| .execute(input) // calls ProcessComponent.execute
| ProcessComponent
| .execute(input)
ProcessService | ProcessRepository
.findProcess(id) | .findProcess(id)
.executeProcess(..)|
问题是:如何使用此网络服务在应用程序中集成Process
个实体?
我在考虑创建一个Process
实体,而不是直接使用DTO作为实体。
例如,在另一个应用程序中,我Module
有一个Process
。
我可以在我的ORM中连接,因此“关联”部分不是问题。问题是 Module
如何执行流程?
通过调用ProcessService
:这很难看,因为我最终会得到一个不提供任何域逻辑的贫血过程实体。此外,这将使Module
实体使用服务,这不是很好吗?
在execute()
中添加Process
方法?但是,实体方法也会调用一个不好的服务
答案 0 :(得分:1)
在DDD中,外部Web服务应该由anti-corruption layer(ACL)封装。在ACL中,Web服务的DTO合同应映射到本地定义的值对象。
就调用外部服务而言,这应该由托管相应用例的application service完成,而不是由您观察到的实体完成。