私はDDD、集約パターン、EF、リポジトリパターン、作業パターンの単位を研究していましたが、ちょっと混乱します。そこで私はここに来て質問をしました。非集約エンティティをDDDの作業ユニットに公開する必要がありますか?
これは例です:学生(主体)、住所、連絡先これら3つのエンティティは集合体を作成します。 DDD/Aggregateのパターンルールの1つは、私がStudentを通してAddressと対話できることです。アドレスを追加/削除/更新することはできません。それは学生を通じて行われなければならない。第2の規則は、学生、住所および連絡先の変更を単一の取引で行う必要があることです。そしてここに私の混乱があります:
私はデータベースにすべてのテーブルのためのリポジトリを持っています。すべてのエンティティにCRUD操作が必要であるためです。しかし、すべてのリポジトリは内部的なものです。 Public(私のData dllから)公開する唯一のクラスはContextとUnitOfWorkです。私はすべてのリポジトリを宣言しました:
質問: 私は集合体の主体のリポジトリだけを持つべきですか?
別の言い方をすれば、 Unit Of WorkではAddress Repositoryが必要ですか?
リポジトリは公開されており、ルート集約のリポジトリのみが必要です。リポジトリは作業ユニットと協力しなければなりません。 – plalx
@plalxだから、どのようにAddressRepositoryなしで人のアドレスをアドレステーブルに挿入することができますか? – Sara
AddressがStudent集合体の一部である場合、それを行うのはStudentRepositoryの責任です。 – plalx