2010-02-24 4 views
12

나는 Employee와 Team간에 many-to-many 연관을 가지고있다. Foreach 엔티티 저장소가 있습니다.BestPractices : MVC 컨트롤러에서 둘 이상의 저장소를 사용할 수 있습니까?

이제 ASP.NET MVC를 사용하고 EmployeeController를 만들었습니다. Employee를 편집하기 위해 View를 만들었습니다. 이보기에서는 모든 팀과 함께 DropDownList가 필요합니다. 문제는 내 EmployeeController가 EmployeeRepository 만 가지고 있다는 것입니다. 그렇다면 어떻게 모든 팀을 확보 할 수 있습니까? 내 솔루션은 이제 두 개의 리포지토리를 사용하는 것입니다.

그러나 이것은 좋은 해결책입니까?

대신 TeamController를 만들고 모든 팀을 반환하는 메서드를 작성할 수 있습니까? (어떻게해야합니까?)

답변

8

예, 컨트롤러가 두 개의 리포지토리에 대한 참조를 가질 수는 있습니다.

사실 내 컨트롤러는 여러 저장소에서 더 자주 작동합니다.

1

일반적으로 집계 루트의 저장소를 만듭니다. 리포지토리에는 컨트롤러 용으로 채워진 엔터티를 반환하는 메서드가 있습니다.

엔티티가 도메인 모델과 완전히 관련이없는 경우 필요한 데이터를 얻기 위해 두 개의 개별 리포지토리를 래핑하는 서비스를 만들 수 있습니다.

+1

many-to-many 연관에서 누가 총 루트입니까? 내 도메인 모델에는 양방향 다 대다 연관이 있습니다. 단방향 관계를 만들 때 어떤 이점이 있는지 직접 묻습니다. 직원은 집계 루트가됩니다. 팀은 Employee와 단 하나의 관계 만 맺었으므로 이것이 괜찮을 것이라고 생각합니다. – Rookian

+0

동의, 같은 문제에 직면했을 때 저장소를 마무리하기 위해 도메인 서비스를 사용했습니다. – blu

+1

제안 사항은 1입니다. 논리적으로 도메인 규칙과 관련하여 루트가 있는지 확인하십시오. 그렇지 않은 경우 2 : 도메인 서비스를 사용하십시오. 다른 사람들은 + 표를 가진 서비스를 제안했기 때문에 이것을 거절 한 것은 의문의 여지가 있습니다. – blu

3

스마트하고 싶습니까? 컨트롤러 내부에 리포지토리를 사용하지 마십시오. 대신 도메인 서비스를 사용하십시오. 하나의 컨트롤러가 여러 서비스의 작업을 통합한다고 생각할 때 그렇게 좋지는 않습니까?

관련 문제