簡體   English   中英

DDD 中的多對多關系

[英]Many-to-many relationships in DDD

我是 DDD 的新手,我被多對多的關系所困擾。 例如,我們有兩個聚合根——Tasks 和 Workers。

Contract 絕對不是聚合根,因為沒有 Task 和 Worker 就沒有意義。 所以,它應該是一些聚合的一部分。 但它應該屬於哪個聚合? 我們需要知道所有任務合同的匯總成本和所有工人合同的匯總成本。 在 Task 和 Worker 中收集合同對我來說是很自然的。

好吧,我可以將成本計算轉移到域服務中,但我擔心這是向貧血的 model 邁出的一步。 是否有處理多對多關系並保留到達域 model 的通用方法?

謝謝!

類圖

通過關注側邊欄中鏈接的相關問題,我發現了這篇有趣的文章:

DDD & 多對多 Object 關系映射

無論如何,它似乎推薦了我直覺的想法:事實上,工人和任務依賴合同並不自然。 也就是說,“工人”的概念在沒有“合同”概念的情況下仍然有意義(對於任務也是如此),因此體現該概念的實體不應依賴於合同實體。

要顯示分配給給定任務的合同或分配給給定工作人員的合同,您需要運行域查詢。 這實際上是對域服務的適當使用,如果您考慮一下,它可以更好地反映您的域的實際情況。

我還注意到您說“Contract 絕對不是聚合根,因為沒有 Task 和 Worker 就沒有意義”。 這實際上是 Contract聚合根的確切原因。

所以,我的建議是,根據 arootbeer 從評論中獲得的見解:提議的新類圖

在我看來, Contract在您的設計中是一流的 object。 您聲稱它在workertask之外沒有意義的說法當然是正確的,但這並不意味着它本身不是聚合根。

據推測, Contract有自己的邏輯來計算其成本,基於與之關聯的taskworker的一些屬性。 同樣, TaskWorker包含的上下文與Contract無關。

您需要跳過的差距是將相關上下文移動到Contract object 中。 讓它存儲worker的 rate 和task的 period(除了各自的 ID,它們只是在上面隱式建模),並動態計算成本。

- 編輯 -

正如 Domenic 所說,您的評論是后續問題的良好候選者。 但是我會說,一旦你將TaskWorker ID 放到Contract上,報告就變成了一件小事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM