2009-01-09 35 views

回答

4

DDD的想法是,領域模型包含您的數據和大部分的業務邏輯。這些服務通常處理這些結構的持久性。

然後就是所有那些業務流程由多個步驟組成的情況,這些步驟總是更改/修改域對象。您通常使用服務來實現某個過程。所以通常你用服務的結果更新域對象。你從來沒有讓域對象實現自己調用服務!

所以它經常見到這樣的代碼:

if (order.isValidForPurchase() && orderValidatorService.isValidOrder(order)) 
    orderService.order(order) 

很簡單,因爲真理的部分是衆所周知的訂單對象,以及一些需要知道orderValidatorService外部數據。可以說這兩行代碼也可以在orderService.order方法中。

我認爲總是有必要研究這些過程中存在多少個域對象;有時候通過制定更多的概念可以獲得比您最初想象的更多的東西。這實際上是業務流程狀態和對象模型的交集。通常DDD模型往往試圖從過度結構的角度來捕捉域,IMO忽略了一些核心過程。所以如果你過於結構化,我認爲你做了一個Order對象。如果您添加過程,您可能會製作ShoppingCartOrder,UnshippedOrder,ShippedOrder,BilledOrderHistoricalOrder。這也使您的服務整合變得更簡單。

相關問題