現在、データベース内のほぼすべてのテーブルのリポジトリがあり、それらを集約ルートのみに縮小することで、DDDとさらに整合させたいと考えています。
次のテーブルがあると仮定しましょう。 User
とPhone
。各ユーザーは1つ以上の電話を持っている可能性があります。集約ルートの概念がなければ、私は次のようなことをするかもしれません:
//assuming I have the userId in session for example and I want to update a phone number
List<Phone> phones = PhoneRepository.GetPhoneNumberByUserId(userId);
phones[0].Number = “911”;
PhoneRepository.Update(phones[0]);
集合根の概念は、実際よりも紙の上で理解する方が簡単です。ユーザーに属していない電話番号を取得することは決してないので、PhoneRepositoryを廃止し、電話関連のメソッドをUserRepositoryに組み込むことは理にかなっていますか?答えが「はい」であると仮定して、前のコードサンプルを書き直します。
UserRepositoryに電話番号を返すメソッドを設定することはできますか?または、常にユーザーへの参照を返し、ユーザーを介して関係をトラバースして電話番号に到達する必要があります。
List<Phone> phones = UserRepository.GetPhoneNumbers(userId);
// Or
User user = UserRepository.GetUserWithPhoneNumbers(userId); //this method will join to Phone
どちらの方法で電話を入手したとしても、そのうちの1つを変更したとすると、どうすれば更新できますか?私の限られた理解は、ルートの下のオブジェクトはルートを介して更新する必要があるということです。これにより、以下の選択肢1に進むことができます。これはEntityFrameworkで完全に機能しますが、コードを読んでいると、Entity Frameworkがグラフ内の変更されたオブジェクトを監視しているにもかかわらず、実際に何を更新しているのかわからないため、これは非常にわかりにくいようです。
UserRepository.Update(user);
// Or
UserRepository.UpdatePhone(phone);
最後に、私のような本当に何にも縛られない、いくつかのルックアップテーブルを、持っていると仮定するとCountryCodes
、ColorsCodes
、SomethingElseCodes
。ドロップダウンにデータを入力するため、またはその他の理由でそれらを使用する場合があります。これらのスタンドアロンリポジトリはありますか?それらを組み合わせて、次のような論理的なグループ化/リポジトリにすることはできますCodesRepository
か?または、それはベストプラクティスに反します。