5

봐 :여러 리포지토리 및 서비스가있는 .NET MVC 컨트롤러? (나는 매니저 종속성에 대한 의존성 삽입 (Dependency Injection)을 사용하고 있습니다) 내 컨트롤러에서

public RoleController(IRoleRepository roleRepository, ISiteRepository siteRepository, IUserRepository userRepository, IDbContext dbContext) 
{ 
    _roleRepository = roleRepository; 
    _siteRepository = siteRepository; 
    _userRepository = userRepository; 
    _dbContext = dbContext; 
} 

많은 종속성이있는 클래스를 갖는는 코드 냄새입니까? 권리?

그러나 내 예에서 RoleUsersSites을 연결해야합니다. 그런 다음이 연관성을 수행하려면 이러한 종속성이 필요합니다.

메일 링리스트에있는 사람들 중 일부는 너무 많은 의존성이 있다는 것은 뭔가 잘못되었다는 신호라고 들었습니다. 그러나 나는 다른 길은 찾지 못한다. 나는 내 책임을 분리했다. 그런 상황에서 나는 치료 방법을 모른다. 뭔가 잘못이다?

업데이트 :

DbContext 내 UnitOfWork에 있기 때문에 내가 저장소 및 DbContext 필요 저장소에 저장하지 않습니다.

이 예는 GRID가있는보기의 연관과 같은 일부 기능이있는 간단한 CRUD입니다.

업데이트 2 : 내 UI 레이어는 MVC입니다

가 나는 구조를 사용하고 있습니다.

+1

일반적으로 나는 모든 엔티티가 아닌 집계 루트에 대한 리포지토리 만 만듭니다. 나는 당신의 도메인을 모르지만, 나의 직감은 당신에게 너무 많은 저장소가 있다고 말해줍니다. 또한 리포지토리와 dbcontext가 필요한 이유는 무엇입니까? 마지막으로, 나는 보통 "서비스"에서 "오케스트레이션"유형의 비즈니스 활동을 수행하고 리포지토리 등을 다루는 서비스를 선호합니다. 그런 다음 컨트롤러의 종속성은 서비스에서만 발생합니다. – Brook

+0

@Brook 업데이트를 참조하십시오. –

+1

가능한 중복 [asp.net-mvc 있음, IOC를 사용하여 컨트롤러에 다중 저장소를 주입하는보다 우아한 방법이 있습니까?] (http://stackoverflow.com/questions/7311623/in-asp-net-mvc- ioc-to-inject-mutiple-repositor를 사용하는 더 우아한 방법입니다. – Omar

답변

8

좋은 DI 프레임 워크 (예 : poor man's DI 사용 안함)를 사용하여 종속성을 관리한다는 점을 감안할 때 나쁘다고 생각하지 않습니다. 이 방법으로, 당신은 명시 적으로 제어기가 모든 것을 필요로 할 것이라고 말하고 있습니다. (응용 프로그램의 다른 많은 부분에서는 이것이 유효한 인수가 아닐 수도 있습니다. 컨트롤러는 프로그램 흐름을 제어하고 지시하는 방식에서 특별하기 때문에 많은 것을보아야하는 이유는 자연스러운 설명입니다. 당신이 정말이 특정 경우에 의존성의 수를 제한하려면 응용 프로그램의 일부 ...)

그러나, 그것은 Users, SitesRoles과 관련된 모든 작업을 수행하는하는 MembershipService를 만드는 감각을 만들 수 . 그런 다음이 세 저장소에 의존하게되며 컨트롤러에는 회원 서비스에만 의존하게됩니다. 당신의 갱신에 대응


: -이 성 윈저 그리고 많은 다른 DI 프레임 워크 가능합니다 당신은 "웹 요청에 따라"싱글로 작업 단위 (즉 DB 컨텍스트)을 등록 할 수 있습니다. 그런 다음 리포지토리에 의존하여 모든 변경 작업을 수행하고 컨트롤러가 저장 작업에 의존하게하고 DI 프레임 워크에서 모든 인스턴스에 동일한 인스턴스를 전달하게됩니다.

+0

업데이트보기, 문제는 MVC가 내 UI 레이어입니다. 내가받은 인수는 다음과 같습니다. 컨트롤러는 사용자의 요청에 응답 할 책임이 있으며 원칙적으로 도메인과 관련되어서는 안됩니다. –

관련 문제