2013-02-05 15 views
7

リポジトリパターンに従って、各ルート集約エンティティのリポジトリを作成します。ドメイン駆動型設計の各ルート集約エンティティ用の1つのリポジトリ

私はこのモデルを持っている場合を意味します

顧客は私が投入されている4つのリポジトリがある意味します 順序は 製品がサプライヤー

などを持っている製品を提供しています受注...

を持っていますONEレポ。顧客はルートエンティティです。

私はここで何か誤解していますか?

答えて

8

集約ごとにリポジトリを作成するのは間違いありません。ただし、ドメイン内の集約セットはさまざまです。 Customer/Order/Product/Supplierモデルは、いくつかの方法で集計に分解できます。凝集体への分解は、様々な要因に依存し、手近な領域に左右される。

集約は、それらのエンティティに関連付けられた振る舞いのコンテキスト内でどのエンティティのセットが一貫しているべきかを定義することを意味する一貫性境界でなければなりません。この制約がある場合、集約間のオブジェクト参照を削除し、ID参照で置き換える必要があります。

お客様のモデルでは、顧客、注文、製品、サプライヤが異なる集計であり、したがって別々のリポジトリが必要になる可能性があります。顧客は集約ルート(顧客集約の一部)であり、注文は顧客に依存しますが、顧客リポジトリに注文リポジトリを含める必要はありません。オーダーはオーダー集約のルートであるため、オーダー・リポジトリーは完全に別個でなければなりません。

凝集体の設計方法の詳細については、Effective Aggregate Design by Vaughn Vernonをご覧ください。

+0

この問題を修正してください: "...オーダーはオーダー集約の総ルートです" – Elisabeth

+0

文言を少し変更しましたが、わかりませんあなたが修正したかったものは? – eulerfx

+0

hm私はorderがorder aggregateのルートである理由を理解できないと思います。注文が注文集計のルートではないことを教えてください。リンクをありがとう、私はそれをブックマークしました。 – Elisabeth

0

上記のとおり、4つのエンティティが関連しており、リポジトリにはすべての関連エンティティのトランザクションコンテキストが実装されています。

+0

質問はエンティティとデータモデルに関するDDDに関するものではありません –