2010-01-25 90 views
4

我有類別和產品實體。兩者之間的關係是一對多的關係。因爲,類別是聚合根,我認爲我應該只做一個單獨的存儲庫ICategoryRepository,它也應該處理產品。只有聚合根的存儲庫!

想法?

+0

我的DDD副本在家裏,所以我會留下其他人的存儲庫/聚合根問題,但首先,你確定Category是否真的是聚合根?只具有一對多關係並不指定根。以此爲根將意味着您只能檢索某個類別中的所有產品。而且,像Category這樣的東西通常會被模擬爲一個值,而不是實體對象。 – 2010-01-25 21:54:19

回答

3

我沒有我的Domain Driven Design by Evans副本的那一刻,這是我想轉了明確的答案,但在這個dddstepbystep參考指出:

區內的聚集存在 彙總根。聚合根目錄是 父實體對所有其他 實體和值對象在 聚合。

一個儲存庫來操作時的 聚合根

所以,是的,根據這個定義去,你的分類信息庫應該是負責任的持久化類聚集內所有實體。

儘管如此,我的評論中的問題仍然存在 - 您確定類別真的是一個有用的聚合根嗎?事實上,你問這個關於堅持產品的問題表明你經常認爲他們與他們的產品類別分離,或者至少希望能夠在他們的產品類別之外處理某些產品。

+0

這很有趣,因爲產品必須有一個類別,否則它將不存在。所以,我認爲由於這種關係類別是聚合根。如果我錯了,請糾正我的錯誤! 我認爲Person和Address也具有相同的關係,其中Person是聚合根。 – 2010-01-25 22:12:25

+0

@john看看這個帖子在這裏:http://www.lostechies.com/blogs/jimmy_bogard/archive/2008/05/20/entities-value-objects-aggregates-and-roots.aspx他談到與總量,根源,實體和價值。關鍵的說法是根實體是可以直接從其他聚合中引用的聚合中唯一的實體。這並不是說你的造型是錯誤的,只是對我來說似乎很古怪 - 但我可能完全錯了! – 2010-01-25 22:45:06

+0

我認爲在這種情況下,產品應該有一個單獨的代表。因爲顧客可以在他的購物車中添加產品。 user.Cart.AddProduct(產物)。如果將Category設置爲聚合根,那麼我應該從Category對象中遍歷關係。 – 2010-01-25 23:00:33