2012-11-21 2 views
1

중간 크기의 MVC 프로젝트에서 작업하고 있습니다.System.Web.Mvc의 모범 사례는 무엇입니까 ViewModels

보기 모델이 모두 웹 어셈블리에서 별도의 라이브러리로 분리되었습니다. 데이터 구조 중 하나는 목록 상자로 표시되며 MultiSelectList 속성을가집니다.

외부 VM 프로젝트에는 현재 System.Web.Mvc 어셈블리에 대한 참조가 없습니다.

참조를 추가해야합니까?

MultiSelectList 클래스에 대한 참조가 없도록 코드를 리팩터링해야합니까? 이 경우 RawOptionValues ​​속성을 MultiSelectList로 변환 할 수 있습니까?

public class SelectListPrompt{ 

    public IDictionary<string, string> RawOptionValues { get; set; } 

    public MultiSelectList OptionValues 
    { 
     get 
     { 
      return new MultiSelectList(RawOptionValues.ToList(), "Key", "Value"); 
     } 
    } 
} 

답변

2

보기 모델은보기에 밀접하게 결합되어 있습니다. 이것이 그들의 목적입니다. 그렇습니다. 그들은 정확히 System.Web.Mvc에 대해 알아야합니다. 당신은 별도의 클래스 라이브러리에 넣었습니다. 그렇지만이 방법을 사용하기로 결정했다면,이 라이브러리는 SelectListItem, MultiSelectList과 같은 클래스에 대해 알아야합니다. 그래서 참조를 추가하십시오. 모델을 리팩터링하지 마십시오. 해당 클래스에서 작업해야합니다.

주의해야 할 점은 도메인 모델을 ASP.NET MVC와 연결하지 않는 것입니다.

+0

나는 그런 식으로 기울고있었습니다. 나는 다른 팀 멤버로부터이 프로젝트를 시작하고 '디자인'결정에 대해 궁금해하고 있습니다. – THBBFT

3

보기 모델을 별도의 프로젝트에 넣는 데 아무런 이점이 없습니다. 뷰 모델은 뷰에 밀접하게 결합되어야하므로 사용자가하는 모든 작업은 복잡성을 가중시키지 않아도 상당한 이점을 제공합니다.

컨트롤러를 별도의 프로젝트에 투입하는 사람들에 대해서도 똑같이 느낍니다. 나는 정말로 이익을 보지 못한다. 구조적 또는 설계상의 이점이 없으며 단지 일을 더 복잡하게 만듭니다.

물론 예외는 휴대용 영역이지만 뷰 또는 컨트롤러가 아닌 모든 프로젝트를 별도의 프로젝트에 배치해야합니다.

+0

전적으로 동의합니다. 코드가 난독 화됩니다. 나중에 나는 문자열 상수 만있는 라이브러리에 대해 질문 할 것입니다 ... 농담 ... 묻는 것에 대해, 나는 그 코드로 무엇을 할 것인지를 안다. – THBBFT

관련 문제