내 응용 프로그램을 엔티티 별 저장소에서 집계 루트별로 리포지토리로 리팩토링하려고합니다.모든 집계 루트 엔터티 하위 엔터티를 가져 오는 중?
기본 예제에는 Cars의 엔티티 루트가 있습니다. 자동차는 고용 계약을 맺고 있습니다. 내가 볼 수있는 한, 자동차가 없으면 계약이 존재하지 않으므로 자동차는 집합 루트입니다.
시스템의 모든 계약 (루트 엔티티의 모든 하위 엔티티)을 표시하는 사용자보기를 구현하려고합니다. 리팩토링하기 전에 나는 단지 나의 계약 저장소에 가서 All을 얻을 수 있었다. 계약 저장소가 제거되었으므로 (이제는 루트가 아닌) 이제는 모든 자동차를 내 저장소에서 꺼내어 모든 계약서를 받아야합니다.
내 저장소 I는 ICarManagementService를 생성하고 (아마도 필터 파라미터)와 GetAllContracts 방법이 갖는 생각 인터페이스
public interface ICarRepository
{
IQueryable<Car> All { get; }
IQueryable<Car> AllIncluding(params Expression<Func<Car, object>>[] includeProperties);
Car Find(long id);
void InsertOrUpdate(Car car);
void Delete(long id);
void Save();
}
있다. 그 계약을 통해 모든 자동차 엔티티를 꺼내고 각 엔티티와 관련된 고용 계약을 검색하여 필터링해야하는 모든 계약을 얻으시겠습니까?
그런 다음 이전과 같이 계약서를 컨트롤러에 전달하고 계약서를 자동 매핑 할 수 있습니다.
이 모범 사례입니까?
감사
그램
나는 사람들이 편집을 위해 "자동차"를 잠글 수 있기를 바랬다. 고용 계약서를 집계 할 수 있습니다. 사람들이 겹치는 고용 기간을 추가 할 수 없도록해야합니다. 고용자가 집계 된 경우에도이를 집행 할 수 있습니까? – GraemeMiller
도메인에 대해 잘 이해하지 않고도이 질문에 대답하기가 어렵습니다. 그러나 나는 너에게 힌트를 줄 수있다. 우디 다한 (Udi Dahan)이나 그렉 영 (Greg Young)이 언급 한 방법은 컴퓨터없이 종이 기반 비즈니스에서이 기능을 구현하는 방법을 상상해보십시오. 이는 비동기 접근 방식으로 이어질 수 있습니다 (재고가 남아있는 경우에도 두 고객이 책을 주문할 수 있도록 아마존처럼 일시적으로 채용 기간을 허용 한 다음 이메일로 알려줍니다). "모든 것이 항상 100 % 일치해야합니다"라는 제한을 제거하면 많은 것을 얻을 수 있습니다. – Dmitry
나중에 더 자세한 질문을 게시 할 가능성이 있습니다. 이번 주에 청서의 사본이 도착해야합니다. 좋은 DDD 연습에 대해 더 잘 이해할 수 있기를 바랍니다. 도와 주셔서 감사합니다. – GraemeMiller