나는 뿌리 집합에 대해 토론하고 탐색 속성을 사용하여 자식 객체를 탐색합니다.MVC DDD EF 컴플렉스 자식 객체 탐색
시나리오 1 :
- 고객은
- 주소 연락처
고객이 여러 개의 주소를 가질 수있는 개체이고 주소가 여러 개있을 수 있습니다
Dim customer as Customer = _customerRepository.GetById(request.Id)
우리는 고객을 ACESS해야하는 경우
우리가 다음 아래와 같은 고객의 개체 내에서 주소를 통해 통과 해결합니다.Dim address as Address = customer.RetrieveAddress(request.AddressId)
이 접근
는 자식 개체의 X 번호에 수행 될 것이다. 내가 보여준 예제는 단순한 것이지만, 수백만 개의 레코드를 포함하는 DB 테이블의 관점에서 보면, 일단 합계 루트 객체가 큐잉되어 반환 된 후에 여러 자식 객체를 통과 할 때 다른 사람들이 성능 문제로 어떻게 관리합니까?시나리오 2 : 위의 대신 고객 저장소를 쿼리하고 고객 객체를 반환
같은 예를 들어, 우리는 대신 자식 개체를 반환합니다.
Dim address as Address = _customerRepository.GetAddressById(request.AddressId)
이제 주소 개체를 쿼리 했으므로 고객 개체를 검색 할 필요가 없습니다. 비록 고객 저장소를 사용하여 주소 테이블을 직접 쿼리하고 주소 개체를 반환하는 것은 DDD를 따르는 경우 허용되는 것입니까? 아니면 시나리오 1을 사용하여 고객 리포지토리를 쿼리하고 집계 루트이고 고객 개체를 통과하는 고객 개체를 반환해야합니까?
우리가 묻는 이유는 우리의 DB 다이어그램에 우리의 집계 루트를 통과 할 여러 테이블이 있고 잠재적으로 시간이 지남에 따라 수백만 개의 레코드가 포함되어 성능을 저하시킬 수 있기 때문입니다.
네비게이션 속성을 사용하자마자 EF를 사용할 때 잠재적으로 100 개 이상의 쿼리를 보내는 각 하위 개체에 대한 쿼리를 전송하기 때문에 다른 사람들이 성능을 저하시키지 않으면 서 어떻게 DDD를 완벽하게 적용 할 수 있는지 궁금 할뿐입니다. for 루프에서.
마이크