-
16-09-2019 - |
質問
ということかん2体-Foo、Barです。Fooが集ルートを含むバーがあります。私が理解ではこのようになっているでしょう:
public class Foo{
private readonly Bar Bar;
}
を提供したい機能のためのユーザーの選べるバスルームでドアをノックするFoosからあらかじめ定義したリスト(変更します。
の場合ポータルをカスタマイズされた総根だけではありませんリポジトリのためのバー団体をいう。
この問題をバーを作成できませんでしたまたは更新された独自な考Foo.
となると、このバーはついてのリポジトリがこの無意味なFoo?
解決
、これは、集約ルートではありません。たとえば、あなたはその順序なしのOrderItemsのリストを取得することはできませんので、これは単一の集約ルート(注文)ですが、製品の注文集約ルートの一部ではないので、のOrderItemsに割り当てる製品のリストを取得することができます。
のOrderItemが注文集約ルートの一部でありながら、あなたはまだ作成して、独立して、それを更新することができていることに注意してください。しかし、あなたは注文を参照せずにそれを得ることができません。 、あなたのバーで同じことがfooの一部であっても、あなたはそれぞれ(Foo.Bars)を取得し、それに取り組む、またはFoo.AddBarを行うことができます(新しいバー())。あなたはFooのせずにリストを取得する必要がある場合でも、バーはFooの集合体の一部ではありません。それは別のエンティティである。
まあ、それは私がここでDDDを見る方法ですが、私はもちろんのエリック・エヴァンス、ないんだけど。
他のヒント
その理由を総根:
- 提供されてい制御および監督へのアクセス複合体
- で実施するためのルール全体の集合体で有効な
私の取り:
ばるか選択する必要があります Bar
オブジェな Foo
, を使用し BarRepository
.
が---
だった場合は更新 Bar
, やがまとめられることにより、バリデーションルールのためにその親 Foo
?こうべきアクセス Bar
経由で親 Foo
.
ただし、アクセスするために必要なバ Bar
オブジェクト(e.gのためのバッチジョブまたは報告書)、 知 その Foos
な、見ていて気分が良いものにアクセスしてください BarRepository
.
この総根を構成することが出来、他の集計。することを発見 Bar
は総根そのものは、正当性、 BarRepository
:)
あなたはバーのエンティティである必要があることを確認しますか?あなたはそれを追跡し、ドメインでそれを変更する必要がありますか?あなたは値オブジェクトとしてそれを見ることができれば、私はあなたがサービスからそれを取得し、その後はFooエンティティに選択した値オブジェクトを「接続」ことを示唆しています。ドロップダウンリストを瞬間のために。