글쎄, 내 질문에, 어떻게 MVC 응용 프로그램에서 "레이어"를 설계하는 것입니다. 이 간단한 아키텍처를 살펴보고 MVC 앱용으로 사용하고 있으며 깨끗하고 효율적으로 보입니다.
프로젝트 솔루션 - 비즈니스 모델 - 비즈니스 도메인을 나타내는 POCO 클래스로 가득한 간단한 클래스 라이브러리. 여기서 데이터 주석, 검증 로직을위한 메타 데이터 클래스 등을 사용할 수 있습니다.
프로젝트 - EF 기반 리포지토리 - 다른 간단한 클래스 라이브러리; 여기에 정의 된 컨텍스트 (EF 코드는 처음에는 훌륭하지만 EF 데이터베이스를 먼저 사용하거나 모델을 먼저 사용할 수 있습니다. 비즈니스 모델 클래스 라이브러리에 POCO T4 템플릿을 추가하면됩니다.) - 클래스 집합 - 리포지토리
프로젝트 - 나는 보통 "ServiceLayer"또는 그렇게 (나는 더 나은 이름에 대한 제안을 위해 열려있다 :) - 그것은 리포지토리 및 다른 서비스 (별도의 프로젝트에서 구현)에 대한 인터페이스를 포함하고 내 MVC (또는 다른 기술) 기반 응용 프로그램 사용; 저장소에서 2.project 이러한 인터페이스를 구현
프로젝트 - MVC 웹 사이트. Dependency Injection (DependencyResolver를 빌드하고, Ninject 컨테이너를 사용하는 것을 좋아한다)을 매핑 저장소 (및 다른 서비스)에 사용합니다. 그런 다음 컨트롤러로 생성자 주입을 사용하거나 일부 "게으른"접근 방식은
는
그것은 다음과 같은 형태 (아래 참조) :
스키니 컨트롤러 :
public class SomethingController : BaseController
{
public ActionResult DoSomething(SomeBusinessThing input)
{
if (ModelState.IsValid)
{
var result = CustomerRepository.DoSomeBusinessLogicAndPersistenceAndStuff(input);
return View(result); // you can use AutoMapper here, if you dont want to use business object as viewmodels
}
}
}
내 저장소 "속성을 "내 BaseController에서 상속 :
이
public class BaseController : Controller
{
// ... other stuff used by all (or multiple) controllers
private ICustomerRepository _customerRepository;
protected ICustomerRepository CustomerRepository
{
get
{
if (_customerRepository== null)
_customerRepository= DependencyResolver.Current.GetService();
return _customerRepository;
}
}
}
당신이 사용할 수있는"경우 게으른 "DI 당신의 컨트롤러는 많은 서비스를 사용하지만 액션 당 1 ~ 2 개만 사용하므로 생성자와 함께 모든 서비스를 주입하는 것은 비효율적입니다.누군가는 당신에게 이런 식으로 의존성을 숨기고 있다고 말할 수 있습니다.하지만이 모든 것들을 한 곳에서 지키면됩니다. BaseController는별로 중요하지 않습니다.
음, 저장소의 구현은 실제로 귀하의 비즈니스입니다. MVC 응용 프로그램도 그나마 당신이 EF를 사용하여 알고, IT 서비스의 인터페이스를 알고 구현 기저의에 대한 관리를 나던
Conslusion (당신은 당신이 필요 나중에 경우 언제든지 전환 할 수 있습니다!) :
컨트롤러는 스키니입니다. 비즈니스 로직 없음
모델은 FAT입니다.이 경우 리파지토리는 모든 비즈니스 로직을 캡슐화합니다 (물론 다른 유형의 서비스도 사용할 수 있습니다. , MVC는 신경 쓰지 않는다. (I Y 인터페이스)
ViewModels는 뷰에 대한 입력 (와 뷰 모델은 직접 비즈니스 모델이 될 수 있습니다, 또는 당신이
이것은 .NET 응용 프로그램의 아키텍처에 대한 유용한 정보이며 MVC에 대한 섹션이 있습니다. http://www.amazon.com/Microsoft%C2%AE-NET-Architecting-Applications-Pro-Developer/dp/073562609X –