1

사용자가 속한 팀과 멤버십 정보를 제시해야합니다. 다 대 다 관계이므로 role_type, invited_at과 같은 멤버십 정보가 포함 된 team_user이 있습니다. namedescription과 같은 팀 자체에 대한 정보가 포함 된 team 테이블이 있습니다. 최적화 쿼리와 감소하는 모델링 품질

지금 내가 저장소를 통해이 쿼리의 두 가지 방법이 있어요 : 당신이 볼 수 있듯이

const user = UserRepository.get(1); 
const teams = UserRepository.getTeams(user.id); 
const memberships = UserRepository.getTeamMemberships(user.id); 

// do something with the data 

는, 사용자에 대한 팀을 얻을 수 있기를, 나는 team_user 테이블을에 가입해야 ...하지만 회원 정보만을 조회 할 때 team_user 테이블에 가입해야합니다.

누구나 이것을 최적화하는 방법에 대한 제안이 있습니까? 또는 모델링 측면에서 품질 저하 (?)에 해당하는 최적화가 아닌가?

+1

CQRS를 검색 –

+0

리포지토리라는 용어 이외에 도메인 구동 디자인과 관련된 질문이 없습니다. – wolverine

답변

2

도메인 모델을 쿼리하면 안됩니다. 저장소는 전체 집계 만 반환해야합니다. 쿼리의 경우 읽기 모델 또는 적용 가능할 경우보다 원시 유형이있는 명령/쿼리 책임 분리 접근법을 사용할 수 있습니다. 나는 해당 ISomeRepository 인터페이스에 대한 ISomeQuery 인터페이스를 사용하는 경향이 있지만 적절한 무엇이든 사용하여 이러한 이름을 수 :

public class UserQuery : IUserQuery 
{ 
    public Query.Membership FindTeamMembership(int userId) 
    { 
     // here we'll access the data base directly 
     // using as raw a format as possible 
    } 
} 

또한 현재 어떤 비슷한 이름의 도메인과의 충돌을 피하기 위해 Query 네임 스페이스의 읽기 모델을 네임 스페이스 좋아 수업.