从webservice获取的实体:如何集成DDD模型?

时间:2013-04-25 08:57:54

标签: web-services service domain-driven-design entity soa

我有一个带有复杂模型的“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方法?但是,实体方法也会调用一个不好的服务

1 个答案:

答案 0 :(得分:1)

在DDD中,外部Web服务应该由anti-corruption layer(ACL)封装。在ACL中,Web服务的DTO合同应映射到本地定义的值对象。

就调用外部服务而言,这应该由托管相应用例的application service完成,而不是由您观察到的实体完成。