私は、ユーザーが質問にフォームで回答するシステムを持っています。私はこのモデルを表現するオブジェクトを持っていますが、これらのオブジェクトをDDDの観点からどのように整理するかについてはあまりよく分かりません。深層階層を持つ集約ルートがDDDに適していますか?
- フォーム(独自のリストがあります)。
- セクション - >(独自のリストを持ちます)グループ;
- グループ - >(独自のリストを持つ)質問;
- 質問 - >(サブ質問の独自のリストを持つことができます)質問;
- 質問 - >(それ自身のリストを持っています)回答;
- Answer - >(それ自身のリストを持っています)Answer_Details;
- Answer_Detail - >(潜在的に独自のサブ詳細のリストがあります)Sub_Answer_Details。
すべてのオブジェクトは15以上のプロパティを持ち、それぞれが親なしでは意味をなさない。 DDDによると、フォームエンティティは集合ルートでなければならず、他のすべてのオブジェクトは値オブジェクトである必要があります。つまり、私はフォームエンティティのためだけにリポジトリが必要です。この場合、FormRepositoryは子オブジェクトのすべての種類のCRUDメソッドで複雑になります。私の推論はDDDの観点から正しいのですか?それは大丈夫ですか?そのような表現は簡単にパフォーマンスの問題につながると私は信じている。
最近、[集約効果的な設計](https://vaughnvernon.co/?p=139)を読んで、小さな集計をお勧めします。コレクションにアイテムを追加すると、コレクション全体がフェッチされるため(たとえば、nhibernateはこのように動作します)、 – xhafan
[有効な集約設計]へのリンクを修正しました。 (http://dddcommunity.org/library/vernon_2011) – xhafan
それは多くの要因によって異なります。同じフォームの同時修正はありますか?答えが「はい」の場合は、より大きなクラスター集約を作成すべきではありません。また、ユースケースは非常にCRUDなので、UIの観点からは、フォーム全体のすべての編集可能なフィールドを表示し、ドキュメント全体として保存するだけです。ただし、UIを少し分けて(たとえば、一度に1つのグループを編集したり、1つのセクションなどを編集できるようにしておくと、複数のARを持つことでメリットがあります)。 – plalx