MVC 아키텍처 모범 사례 [닫기]


28

내 질문은 MVC 응용 프로그램을 설계하는 방법에 대한 것입니다. 예를 들어, 컨트롤러에서 데이터 액세스를 분리하기 위해 리포지토리 패턴과 함께 DI를 사용하는 것이 좋지만 MVC를 위해 특별히 그렇게하는 방법은 거의 없습니다. 예를 들어 리포지토리 클래스를 어디에 배치합니까? 모델이 실제 데이터 액세스 기술과 상대적으로 분리되어 있어야하므로 모델과 관련이없는 것 같습니다.

두 번째 질문은 레이어 또는 계층을 구성하는 방법입니다. 대부분의 예제 응용 프로그램 (Nerd dinner, Music Store 등)은 모두 일반적으로 L2S 또는 EF 코드를 직접 호출하는 컨트롤러가있는 단일 계층, 2 계층 방식 (테스트는 제외)을 사용하는 것으로 보입니다.

다중 계층 / 계층 응용 프로그램을 만들려면 MVC와 관련하여 모범 사례는 무엇입니까?

답변:


5

DI는 Controller Factory를 사용하여 ASP MVC에서 수행됩니다. 이 팩토리는 컨트롤러 종속성을 해결하는 데 사용됩니다.

MvcContrib에는 즉시 사용할 수있는 Controller Facotry 구현이 있습니다. Castle Windsor 구현을 사용하고 잘 작동합니다. TestHelper 클래스를 확인하는 것도 좋습니다. Controller HTTPContext, Sessions 등을 조롱 할 수있는 매우 멋진 기능이 있습니다. MVCContrib

개인적으로 모델에 작업 할 리포지토리 인스턴스를 제공하고 싶습니다. 모델은 API를 저장소 (CRUD)에 노출합니다. 특정 모델에 대한 컨트롤러의 의존성은 생성 (생성자)에 주입되며 컨트롤러 팩토리를 통해 주입됩니다. 이것은 내 IoC 컨테이너가 관리하는 객체 그래프의 진입 점입니다.


2

예를 들어 리포지토리 클래스를 어디에 배치합니까?

그들은 모델에 속합니다. 그것들은 인 애플리케이션 모델입니다.

레이어를 어떻게 구성합니까? 다중 계층 / 계층 응용 프로그램을 만들려면 MVC와 관련하여 모범 사례는 무엇입니까?

계층 코드의 물리적 분리를 나타냅니다. 레이어는 논리적 분리를 나타냅니다. 레이어는 (현재와 같이) MVC에 적합합니다. 비즈니스 로직의 양에 따라 컨트롤러에 배치하거나 별도의 어셈블리에 배치 할 수 있으며 요청주기 동안 컨트롤러에서 사용할 수 있습니다.


다중 계층 응용 프로그램의 UI 프로젝트로 가라고 제안하고 있습니까?
Erik Funkenbusch

@Mystere Man 거대하지 않으면 MVC 응용 프로그램을 호스팅하는 프로젝트로 이동해야합니다. 특히 비즈니스 로직은 컨트롤러에 들어가고 각 작업에는 고유 한 로직이 있습니다. MVC는 단순한 UI 전용 패턴이 아닙니다. 그래서 나는 그것이 'UI 프로젝트'라는 당신의 주장에 동의하지 않습니다. 그렇지 않습니다. View섹션 (UI가 있음) 인 MVC 프로젝트입니다 .
George Stocker

좋아, 어쩌면 나는 그것을 잘못 표현했다. 그러나 뷰 계층이 데이터베이스를 조작해서는 안된다는 데 동의하지 않습니까? 그리고 모델에 리포지토리 클래스를 넣으면 뷰가 그렇게 할 수 있습니다.
Erik Funkenbusch

Small MVC 응용 프로그램에서 UI "Layer"는 단순히보기를 보유한 폴더입니다. 더 큰 응용 프로그램에서는 자체 프로젝트 일 수 있습니다. 자체 프로젝트 인 경우 컨트롤러와 조정되며 컨트롤러는 필요에 따라 BusinessLayer에 연결할 수 있습니다. 컨트롤러 외부의 아무도 비즈니스 계층이 존재한다는 것을 알 필요조차 없습니다. 나는 당신이 이것들이 별도의 프로젝트에 있다고 자동 생각하고 있다고 생각하지만 반드시 그럴 필요는 없습니다.
George Stocker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.