저는 현재 데이터베이스의 거의 모든 테이블에 대한 리포지토리를 가지고 있으며 루트 만 집계하도록 줄여서 DDD에 더 잘 맞추고 싶습니다.
다음 테이블 User
과 Phone
. 각 사용자는 하나 이상의 전화기를 가질 수 있습니다. 집계 루트의 개념이 없으면 다음과 같이 할 수 있습니다.
//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
휴대 전화 중 하나를 수정했다고 가정 할 때 휴대 전화를 획득하는 방법에 관계없이 어떻게 업데이트해야합니까? 나의 제한된 이해는 루트 아래의 객체가 루트를 통해 업데이트되어야한다는 것입니다. 이것은 Entity Framework에서 완벽하게 잘 작동하지만 코드를 읽으면 Entity Framework가 그래프 내에서 변경된 개체에 대한 탭을 유지하고 있음에도 불구하고 실제로 업데이트하는 내용을 알지 못하기 때문에 매우 설명 적이 지 않은 것처럼 보입니다.
UserRepository.Update(user);
// Or
UserRepository.UpdatePhone(phone);
마지막으로, 나는 같은 정말 아무것도에 연결되지 않은 여러 개의 룩업 테이블을 가지고 가정 CountryCodes
, ColorsCodes
, SomethingElseCodes
. 드롭 다운을 채우는 데 또는 다른 이유로 사용할 수 있습니다. 독립형 저장소입니까? 그것들은 어떤 종류의 논리적 그룹화 / 저장소로 결합 될 수 있습니까 CodesRepository
? 아니면 모범 사례에 위배됩니다.