2013-02-05 61 views
7

如果您遵循存儲庫模式,他們會......說爲每個根集合實體創建存儲庫。域驅動設計中的每個根集合實體的一個存儲庫

這意味着,當我有這樣的模式:

客戶有訂單 爲了有產品 產品供應商

等等

這將意味着我有4個倉庫被投入ONE回購。顧客是根本實體。

我在這裏誤解了什麼嗎?

回答

8

這是正確的,你應該有一個倉庫每聚合。然而,可以改變的是您的域中的一組聚合。客戶/訂單/產品/供應商模型可以通過多種方式分解爲集合。分解成集合取決於各種因素,取決於手頭的領域。

聚合應該是一致性邊界,這意味着它定義在與這些實體關聯的行爲的上下文中哪些實體集應該是一致的。考慮到這個約束,集合之間的對象引用應該被刪除並替換爲標識引用。

在您的模型中,可能是客戶,訂單,產品和供應商是不同的集合,因此需要單獨的存儲庫。儘管客戶是一個聚合根(客戶聚合的一部分),訂單取決於客戶,但並不意味着客戶存儲庫應包含訂單存儲庫。訂單庫應該完全分開,因爲訂單是訂單集合的根。

請看Effective Aggregate Design by Vaughn Vernon深入瞭解如何設計聚合物。

+0

請您更正此問題:「...因爲訂單是訂單集合的聚合根」 – Elisabeth

+0

我改變了一些措辭,但我不確定你想改正什麼? – eulerfx

+0

嗯我想我不明白爲什麼訂單是訂單聚合的根源。你能告訴我哪些訂單不是訂單總量的根源嗎?感謝您爲我添加了書籤的鏈接。 – Elisabeth

0

如上所述,您有4個相關實體,存儲庫爲所有這些相關實體實現事務上下文。

+0

問題是關於DDD而不是關於實體和數據模型 –