2011-12-29 2 views
1

지난 주에 ASP.NET MVC3에서 개발 한 블로그 엔진의 소스 코드를 다운로드했습니다. 코드를 분석 할 때, 뷰 모델 작성을 위해 데이터를 검색하는 데 다른 방법을 사용한다는 사실을 알았습니다.보기 모델에서 직접 인스턴스화 된 저장소가 있음

컨트롤러 :

public ActionResult Details(string slug) 
{ 
    var model = new PostDetailsViewModel(UnitOfWork, slug);   
    return View(model); 
} 

보기 모델 :

public PostDetailsViewModel(IUnitOfWork unitOfWork, string slug) 
    { 
     _repository = new PostRepository(unitOfWork); 
     Post = _repository.FindBySlug(slug); 
    } 

저장소 :

public Post FindBySlug(string slug) 
    { 
     return FindAll().SingleOrDefault(x => x.Slug == slug); 
    } 
여기

는 '포스트'뷰 모델의 예는

보시다시피 저장소는 생성자의 뷰 모델에서 직접 인스턴스화됩니다. 그것은 올바른 방법입니까? 컨트롤러 >> 비즈니스 >> 저장소 당신의 조언을

감사 :

일반적으로,이 같은 비즈니스 계층 결국 서비스 계층을 사용했다.

답변

2

올바른 방법일까요?

올바른 방법이 마음에 들지 않습니다. 일반적으로 뷰 모델이 아닌 모델에서이 저장소 액세스를 수행 할 수 있습니다. 또한 그들은 뷰 모델에서 Post라는 속성을 가진 것처럼 보입니다. 그래서 그들은 내가하지 않을 뷰 모델에서 도메인 모델을 참조하고 있습니다.

생성자에서 저장소의 특정 구현을 하드 코딩하는 것과 관련하여 레이어 간의 약한 결합, 재사용, 유지 관리, 단위 테스트 등을 신경 쓰지 않는다면 ... 할 수 있습니다. 그것. IoC가 항상 수행되어야한다는 것을 아무도 확신 할 수 없습니다. 그것은 장단점이 있습니다.

+0

감사합니다. Darin, 이것은 내가 찾고있는 응답입니다.보기 모델을 채우는 것에 대한 게시물을 읽었습니다.이 모델은 2 개월 전에 응답했는데,이 방법이 나에게 더 나은 접근 방법 인 것처럼 보입니다. 여기 있습니다 : http://stackoverflow.com/questions/7943039/how-are-you-populating-validating-your-viewmodels – Bronzato

관련 문제