2017-10-16 1 views
1

리포지토리 패턴을 구현하는 방법을 잘 이해하고 있지만 복잡한 쿼리/메서드에 관한 결정 루프에 빠져 있습니다.저장소 패턴 : 복잡한 방법은 어디에 있습니까?

사용자 테이블에서 특정 필드 값을 가진 모든 사용자 또는 사용자를 얻고 싶다면 User 리포지토리에 들어가는 것이 분명합니다. 그러나 동영상 코스가 이러한 유형의 비디오 코스를 완료 한 모든 사용자와 같이 훨씬 더 복잡한 검색어가있는 경우 어떻게해야합니까? 내 모델에서이 쿼리는 약 6 개의 테이블을 교차합니다.

if (user.completedVideoRequirement)와 같은 작업을 수행 할 수있는 저장소가 필요하지만 사용자 저장소가이를위한 장소라는 자신을 확신하는 데 어려움을 겪고 있습니다. 그것은 나에게 맞는 것처럼 보이지만, 나는 그것을 아주 쉽게 논증 할 수있다.

올바른 방법은 무엇인가요?

EDIT : 데이터베이스 엔터티 이외의 정보를 반환 할 경우 (true/false 또는 다른 int를 반환하는 경우) 어떻게됩니까? 저장소 수준에서이 작업을 수행해야합니까? 아니면 if (users.CompleVideoRequirement.Any())와 같은 작업을 수행해야합니까? 사용자 저장소 정보가 사용자 저장소에 있기 때문에 사용자에게 정보가 있지만 기술적으로는 비디오 정보이기 때문에 여전히 유용하다고 생각합니다.

+0

EF를 사용하고 있습니까? 그렇다면 시스템의 모든 테이블에 대한 컨텍스트가 있어야합니다. 그렇다면 해당 컨텍스트가있는 하나의 저장소에서 테이블에 액세스 할 수 있습니다. 그게 무슨 문제 야? – cassandrad

답변

1

내 생각 프로세스는 "내가 무엇을 반환합니까?" 여기서 대답은 "사용자"이므로 UserRepository는 실제로 올바른 repo입니다.
데이터베이스의 쿼리 최적화를 활용하려면 사용자를 필터링하는 백가지 방법이있을 수 있습니다. 사용자를 모두 필터링하면 UserRepo에 모두 포함됩니다. (괜찮은 사람은 과잉 일 수 있습니다.)

언제든지 사용자 또는 사용자 모음을 숨기려면 UserRepository로 이동하여 가져올 수 있어야합니다. 그것이 인생에서의 목적이며, 사용자에게 필터링을 필요로하는 것입니다.

+0

나는 당신의 대답을 받아 들였다. 왜냐하면 그 질문의 원래 표현에 완벽하게 대답하기 때문이다. 또한 편집 된 버전에서도 작동 할 것이라고 상상합니다. 결과로 데이터베이스 객체를 반환하지 않는 메소드 (예 : t/f, int)를 포함하도록 질문을 편집했습니다. – DiscipleMichael