2013-04-25 45 views
0

我有一個複雜模型(在此簡化)的「Process」應用程序。該應用程序有一個Web服務這樣:從webservice中獲取實體:如何集成到DDD模型中?

Webservice    | Application behind webservice 
------------------------------------------------------ 
ProcessDTO    | Process 
    .getLabel()  |  .getLabel() 
         |  .getSubComponents() 
         |  .execute(input) // calls ProcessComponent.execute 
         | ProcessComponent 
         |  .execute(input) 
ProcessService   | ProcessRepository 
    .findProcess(id) |  .findProcess(id) 
    .executeProcess(..)| 

的問題是:如何整合利用此WebService的應用程序內Process實體?


我想創建一個Process實體,而不是直接使用DTO作爲一個實體的。

例如,在另一個應用程序中,我有Module,它有Process

我可以掛在我的ORM中,所以「關聯」部分不是問題。問題是Module如何執行一個進程?

  • 通過調用ProcessService:這是醜陋的,因爲我也有不提供任何域邏輯貧血過程實體結束。此外,這將使Module實體使用服務,這是不是很好?

  • 通過在Process中加入​​方法?但隨後的實體法還調用服務,這是不好的

回答

1

在DDD,外部Web服務應該由一個anti-corruption layer(ACL)進行封裝。在ACL中,Web服務的DTO合約應映射到本地定義的值對象。

就調用外部服務而言,應該由承載相應用例的application service完成,而不是由您觀察的實體完成。

+0

「DTO應映射到VO」>我正在映射到一個實體:我沒有看到具有身份的'Process'如何可以是一個VO?我錯過了什麼? – 2013-04-25 15:24:57

+0

我沒有看到域層中有'ProcessService'接口的問題,它是由體系結構層中的一個訪問web服務的服務實現的?鑑於你所說的話,你如何處理我的問題?我無法想象一個解決方案。 – 2013-04-25 15:27:23

+0

你也可以映射到一個實體,但是請記住一個實體的身份是持久的。外部DTOs是否會作爲本地實體持續存在?如果是這樣,那麼你可以映射到一個實體。否則,映射到臨時實體是沒有意義的。事實上,調用封裝流程服務的接口沒有問題。我所說的是,實現用例需要調用外部服務的應用服務應該調用服務,而不是任何實體。 – eulerfx 2013-04-25 16:33:53

相關問題