2013-10-01 2 views
0

저는 Asp.Net의 DRY 교장에게 MVC가 매우 중요하다고 들었습니다. 가능하면 ViewModel에서 [Required] 및 [Display (Name = "Shuttle Name")]와 같은 엔티티 속성 속성을 반복하지 말아야한다는 내용도 들었습니다.MVC : DRY vs WET

나는 또한 데이터, 비즈니스 및 프리젠 테이션 레이어 간의 분리가 중요하다고 들었다. 그래서 [ProjectName.Entity 프로젝트의 엔티티에 [Display]와 같은 속성이있는 이유가 궁금합니다. 프리젠 테이션 레이어가 존재하지 않는 데이터 레이어에 대한 아이디어를 좋아합니다. 나는 개인적으로 내 데이터 레이어에 디스플레이 정보가없고 내 프레젠테이션 레이어의 컨트롤에 직접 매핑 된 데이터 엔티티가없는 것을 선호합니다.

예 :

private readonly Shuttle shuttle; 

public ShuttleViewModel() { this.shuttle = new Shuttle(); } 

public ShuttleViewModel(Shuttle shuttle) 
{ 
    this.shuttle = shuttle; 
} 

[Required] 
[Display(Name = "Shuttle Name")] 
public string ShuttleName 
{ 
    get { return this.shuttle.Name; } 
    set { shuttle.Name = value; } 
}   

난이 엔티티 클래스에 이미있는 뷰 모델의 속성을 반복 할 수 있다는 것을 깨닫게 : 표시하거나 편집을 요구하는 속성 중 하나에 대한 개인 셔틀 개체 속성 및 공용 속성을 포함하는 간단한 뷰 모델을 사용하여 수동으로 데이터를 매핑하지만 경험을 통해 나는 매번 작동한다는 것을 발견했습니다. 복잡한 엔티티가 ViewModel에 uber-mapped 될 때 발생하는 끔찍한 비 직관적 인 예외도 보았습니다. 그래서 나는 DRY vs Wet에 대한 약간의 피드백을 좋아할 것입니다.

+0

왜 질문을 보류합니까? 나는 여기에 모범 사례를 요구하고있다! 나는 DRY가 ViewModels에 가능한 한 가깝게 바인딩 엔터티를 의미하는지 묻습니다. – Jamie

답변

6

저는 데이터 엔티티와 뷰 모델을 섞어서는 안됩니다.

뷰 모델 속성은 특정보기 모델에서 일부 속성이 필요하지만 데이터 엔터티에서는 선택적 일 수있는 등 데이터 엔터티마다 다를 수 있습니다.

당신은 프로그래밍 방식으로 내가 동의 할

(홀수 속성에 대한 사용자 정의 매퍼 또는이) 컨벤션하여 속성을 매핑하는 등 Automapper 같은 도구를 사용해야합니다

둘은 서로 다른 기능을 제공으로는 DRY 원칙을 위반하는 것이라고 .

+0

감사 6 월 데이터 엔티티의 속성이 ViewModel의 속성과 다른 목적으로 사용되지만 동일한 속성이며 ViewModel에 대한 데이터 엔티티의 과도한 바인딩이 그것이 완료되어야하는 방법. – Jamie