페이지에서 읽기 전용 데이터 목록을 생성해야하며 해당 데이터가 자연히 여러 페이지에서 생성 될 수 있으며, 잠재적으로 5 개 이상에서 생성 될 수도 있습니다 다른 저장소?DDD에서 읽기 전용 목록에 대해 여러 저장소를 사용하는 방법
우리는 DDD를 사용하고 있으며 저장소를 통해 데이터베이스에 대한 액세스를 강제하고 있지만 DDD에 맞지 않는 시나리오가 있으며 사용하기에 가장 적합한 패턴을 결정하려고합니다. .
예를 들어 동영상, 포럼, 블로그 등으로 된 커뮤니티 기반 웹 사이트가 있다고 가정 해 봅시다. 댓글 목록이있는 포럼 페이지가 있습니다. 이것은 거칠지 만 의미가 있기를 바랍니다. 사용자 이름, 지역 사회 점수, 아바타, 전자 메일, 사용자의 블로그 사용자의 비디오 페이지 :
<table>
<tr><td>User Name (with possible link)</td><td>User's community score.</td><td>User Avatar</td><td>User's E-mail</td><td>User's blog</td><td>User's videos</td></tr>
</table>
<table>
<tr><td>This is a comment.</td></tr>
</table>
그래서 각 주석이 여러 개 포함되어 있습니다. 전통적으로 이러한 정보는 모두 별도의 저장소에서 가져옵니다.
문제는 효율성입니다. 리포지토리는 최대화 할 수 있지만 생성 된 집계를 중심으로 만 최대화 할 수 있습니다. 리포지토리를 사용하면 둘 이상의 리포지토리에있는 데이터에 액세스해야하는 순간 읽기 액세스에 비효율적이됩니다.
내 솔루션 관련 정보와 UserInformation DTO를 만들어 내 동료의
ILIst<UserInformation> GetUserForumsUserInformationByForumPostID(int forumPostID).
하나는 이런 방식으로 DTO를 사용하여 디자인 패턴을 나누기 제안 서명으로 UserForumsRepository의 방법을 배치하는 것입니다 우리는 더 나은 방법은 포럼 주석 ID 목록을 가져온 다음 다양한 ID를 해당 저장소로 전달하여 결과를 반환하는 것입니다.
저의 관점에서 볼 때 저장소의 주된 목적은 CRUD의 CUD 부분에 중요한 비즈니스 로직을 캡슐화하는 것이지만 읽기 전용 목록은 가장 합리적인 방식으로 생성되어야합니다. 적절한 경우 저장소 (예 : 여러 다른 유형 페이지에서 사용되는 공통 위젯)에서 읽기 전용 목록 메소드를 완전히 삭제하는 것이 좋습니다.
이 상황을 어떻게 처리합니까?
동작이 적은 도메인 모델은 빈혈 도메인 모델이라고하는 안티 patten입니다. 우리는 당신이 가진 문제를 해결하기 위해 dto를 사용합니다. 하나 이상의 리포지토리가 결합되어 여러 엔터티를 하나의 병합 된 dto로 매핑 한 다음 클라이언트로 보냅니다. 엔티티를 클라이언트에 보내면 도메인 모델의 상태가 일관성없는 방식으로 변경되는 위험이 있습니다. –
서비스 계층이나 저장소 계층에서이 작업을 수행하고 있습니까? – John