문제

면책 조항 : 저는 DDD와 관련 용어를 처음 접 했으므로 개념을 잘못 표시하고 있다면 저를 수정하십시오.

현재 비교적 간단한 도메인 모델 (카탈로그 항목, 각각 카탈로그 항목 모음을 저장하는 카탈로그 항목)이있는 사이트에서 작업하고 있습니다.

내 저장소는 표준 인터페이스를 따릅니다 FindbyID(int ID) GetAll() 등...

문제는 ID로 특정 이미지를 찾을 때 발생합니다. 나는 다음과 같은 방법으로 끝납니다 FindImagebyID(int CatalogItemID, int ImgID)

새로운 요구 사항이 개발되고 객체 그래프가 더 많이 중첩되면 Find{NestedType}ByID(int catalogItemID,.....,int nestedTypeID)

findall () 메소드에서 ienumerable을 반환하고 더 높은 계층에서 LINQ를 사용하여 이러한 쿼리를 형성해야합니까? 아니면 SOC의 위반일까요?

도움이 되었습니까?

해결책

여러 리포지토리를 구축하기위한 정당성이있는 것처럼 들립니다.

예시

interface CatalogRepository
{
    Catalog FindByID(int ID);
}

interface CatalogImageRepository
{
    CatalogImage FindByID(int ID);
}

각 저장소는 해당 특정 엔티티를 다루는 방법을 아는 책임이 있기 때문에 우려 사항을 제대로 분리합니다.

다른 팁

리포지토리 위의 레이어에서 모델을 필터링하고 원하는 경우 LINQ로 필터링합니다. 저장소를 간단하게 만듭니다. LINQ를 사용하여 데이터베이스에서 데이터를 가져 오는 경우이 메소드는 매우 잘 작동합니다. ADO 또는 다른 레거시 데이터 액세스 계층을 사용해야하는 경우 저장소를 간단하게 만드는 것이 더 어려워 질 수 있습니다. LINQ는 리포지토리 리턴을 IQueryable에 쉽게 만들 수 있고 다음 레이어가 필터링을 추가하고 실제 데이터 검색이 요청 될 때까지 발생하지 않도록 쉽게 할 수 있습니다. 이를 통해 모든 이미지를 가져 오는 getImages ()와 같은 저장소에 메소드를 가질 수 있으며 다음 레이어는 특정 이미지에 대한 필터링을 추가합니다. Ado를 사용하고 있다면 아마도 모든 이미지를 다시 가져오고 싶지 않을 것입니다. 그리고 필터 .... 그래서 트레이드 오프가 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top