2013-12-16 161 views
2

我已經分配了一個相當簡單的項目作爲考試,我有想法使用域驅動設計開發它。聚合和聚合根困惑

你們中的許多人可能會說應用程序非常簡單,以至於使用存儲庫和UoW只是浪費時間,而且您可能是正確的,但我認爲這是一個學習更多東西的機會。

該應用程序是一個「機票」系統,從下面的圖像,你可能很可能猜測它的功能。

事情是,我不知道我是否正確地分離聚合和他們的根。

enter image description here

編輯: 我給出的數據模型,使任何人都可以很容易地發現整個功能。

問題是,從僱員的角度來看,「Rad」表示封裝了整個功能並且是聚合根。

但是從管理角度來看,航班沒有他的業務。 他只是想更新或添加新的飛機 - 公司等。

因此,然後有一個新的聚合根,這是飛機封裝飛機座位(實體),seatType(價值對象)和公司(實體)作爲新聚合。

  1. 這往往混淆我,因爲我有一個聚合根(飛機)在另一個聚合(飛行聚合)內。
  2. 由於聚合根被認爲是沒有它的「CORE」實體,其中的其他實體在沒有它的情況下沒有任何意義,所以我在考慮公司。而我的結論是,公司沒有飛機是有道理的。

爲了更多地解釋管理員想要插入新公司或想先載入公司然後載入其飛機的場景。

DDD原則說聚合中的任何實體只能從根本身加載。 所以這裏是混亂。

回答

0

嗯,這裏的Aggregate和Aggregate根源在哪裏?這只是數據模型...非域模型。

聚合是聚集在一起的項目集合(域對象),聚合根是實體根...(如果您考慮飛行聚合封裝座位,位置...聚合根應該是飛行實體)。

[編輯]

你必須忽略持久性。在你的應用程序中,你可以有許多聚合它取決於你的域,也許飛行是一個聚合和公司另一個;),不要混淆實體和聚合...

+0

我已經更新了問題,而不是在這裏發佈評論,因爲它是該死的大。 – BeStelios

0

聚合是一組實體身份)以及可能的價值對象(沒有身份的對象,不可變的)。聚合中只有一個實體是聚合根。您可以通過檢查聚合中的其他對象是否依賴於它來輕鬆識別它,例如,如果刪除聚合根類型的對象,其餘對象不再有意義(以數據庫術語說,您可以級聯刪除依賴對象)。

聚合根是聚集中的唯一對象,它允許訪問聚合中的其他類型,因此每個聚合將有一個存儲,並返回聚合根類型的實例。