2010-08-20 77 views
5

alt text 標記我的聚合根與1; 2; 3。看起來相當不錯 - 幾乎像葡萄。DDD建模,聚合根之間的相互作用

alt text

事情我不喜歡的是,標有1紅色箭頭的實體。

讓我們想象一下:

  • AR#1是公司
  • AR#2是辦公
  • AR#3是員工
  • 實體標有紅色箭頭被命名爲Country
    • 公司制定僱用員工國家的規則(在招聘時,company.Countries.Contains(employee.Country)必須爲真)

不知何故,我看到域的這相當不重要的部分(也許這聽起來不像在這個例子中的一個),我想,以避免促進國家對總根源。

Glossary關於聚合根說:

到內部成員瞬態引用可以只對單個操作中使用傳遞出去。

因此 - 是否引入'EmployeeCountry'之類的東西,刪除對公司國家的引用,並檢查員工國家是否與任何公司國家在招聘操作上相符合聽起來是合理的?

還有其他想法嗎?

我怎樣才能讓我的葡萄看起來像他們應該?

回答

7

在這種情況下,Country僅僅是一個值對象,而不是一個實體 - 更不用說是一個聚合根 - 所以沒有理由改變任何有關您設計的內容(沒有更多信息)。

此外,注意,警告你舉涉及總根的內部成員,而不是聚集自己。在多個地方維護對聚合的引用沒有任何問題。聚合根應該封裝子對象,以便有一個地方可以爲相關對象執行業務規則。

你可以在埃文斯的「域驅動設計」(又名「The Blue Book」)中的幾個地方清楚地看到這一點。例如,請參見第127頁上的圖(在聚合根的介紹中),該圖顯示了具有對引擎聚合的引用的Car聚合。

+0

究竟發生了什麼變化?多給一點細節。 :) – 2010-08-20 16:56:33

+0

嘿,對不起,這麼簡潔。我有點提示你瞭解更多細節。 :)我的立場是,你所描述的設計沒有任何問題。你對目前的設計不喜歡什麼?你爲什麼認爲你可能需要將國家推廣到一個聚合根? – 2010-08-20 16:58:18

+0

原因2聚合根不應引用相同的實體。這不正確嗎?價值對象有什麼不同? – 2010-08-20 17:02:57