2014-01-27 4 views
0

도메인 드라이브 디자인 방식으로 응용 프로그램을 개발하고 있습니다. 특별한 경우에는 집계의 값 개체 목록을 검색하여 제시해야합니다. 나는이 같은 읽기 전용 저장소를 만든 것을해야 할 일 :Aggreteroot없이 값 객체 검색

public interface IBlogTagReadOnlyRepository : IReadOnlyRepository<BlogTag, string> 
    { 
     IEnumerable<BlogTag> GetAllBlogTagsQuery(string tagName); 
    } 

BlogTag이 블로그의 집계에 값 개체입니다 지금은 잘 작동하지만를 내가 처리의 방법과 프로젝트의 미래에 대해 생각할 때, 내 관심이 커진다! 그러한 경우에 포함 된 모든 값 객체에 대해 별도의 읽기 전용 저장소를 만드는 것이 좋지 않습니까? 누구나 더 나은 해결책을 알고 있습니까?

답변

2

, 그것은 프리젠 테이션을 위해 단지

public IEnumerable<BlogTagViewModel> GetDistinctListOfBlogTagsForPublishedPosts() 
{ 
    var tags = new List<BlogTagViewModel>(); 

    // Go to database and run query 
    // transform to collection of BlogTagViewModel 

    return tags; 
} 

이 코드는 응용 프로그램 계층 수준에 노출되지 않습니다 .. 그런 짓을, (보고)를의 도메인 계층

내가 메서드 이름에 사용하는 언어에 주목하면 좀 더 명시 적으로 표시하고 사람들이 쿼리를 정확히 사용하는지 알려줍니다 (이것이 의도 인 경우 - 조금 추측하지만 잘하면 얻을 수 있음). 내 말은).

+0

감사, 확실히 내가 서비스 (응용 프로그램) 계층에서 동일한 방법을했습니다,하지만 난 값 객체의 목록을 얻어야한다 저장소 층에 대해서 이야기하고 (이 같은에 있어야

건배 스콧 집계 루트 저장소 또는 다른 읽기 전용 저장소?) FlunetNhiberate 및 SQl 서버를 사용하는 방식으로 – Ehsan

+1

저장소 자체가 필요하지 않습니다. http://www.jefclaes.be/2014/01/repositories-where-did-we-go-wrong_26.html – JefClaes

+0

, 감사합니다. – Ehsan

3

집계 루트 만 거기에 속하기 때문에 값 개체를 자체 리포지토리에 보관하지 않아야합니다. 대신 도메인 모델을 신중하게 검토해야합니다.

여러 집합체에 걸쳐있는 값 개체를 추적해야하는 경우 태그 집합과 같은 다른 집계 (예 : 태그 클라우드)에 속할 수도 있습니다.

이것은 블로그 집계에 BlogTag 값 개체가 필요하지 않다는 의미는 아닙니다. 하나의 집합 내의 값 객체는 다른 집합의 실체이거나 집합 적 루트 일 수도 있습니다.

아마도 this question을 살펴 봐야 할 것입니다. 유사한 문제를 해결합니다. 나는이 방법은 사용자 인터페이스를 제공 당신이 단지 쿼리 서비스를 필요가 있다고 생각