보기 모델은 거의 도메인 클래스 모음이 아니어야합니다. 우선, 도메인 클래스를 뷰 모델에 넣는 것이 큰 주제입니다. 많은 사람들은 당신이 그렇게해서는 안된다고 생각합니다. 보기에는 전체 User 인스턴스가 필요하지는 않지만 이름 만 필요합니다. 전체 User 인스턴스를 뷰 모델에 보관하면 실제 뷰 모델 의도를 숨기고 재사용하기가 어려워집니다. 은 뷰에서 사용자 속성에 액세스하여 형식을 지정하는 대신 이름을 올바르게 지정하는 문자열 UserName 속성을 사용하는 것이 좋습니다.
그 이론은 아무도 없습니다. 은입니다. 그러나 기억을 유지하고 성취하려고 노력하는 것이 좋습니다.
둘째,보기 모델은 유효성 검사 특성 및 추가 프레젠테이션 논리와 같은보기 의미 체계를 제공해야하기 때문에 도메인 클래스 모음이 아니어야합니다. 선택 목록의 데이터, 형식 지정 등을 제공하는 집계 속성을 가질 수 있습니다. 또 다른 예를 들어, POST 뷰 모델에는 원시 양식 데이터를 엔티티로 변환하는 메소드가있을 수 있습니다.
일부 프리젠 테이션 로직을보기 및/또는 컨트롤러에서보기 모델로 이동해야합니다. 서식,보기에서만 필요한 속성 등입니다. 컨트롤러는 엔터티 컬렉션을 뷰 모델 데이터 컬렉션으로 변환하면 안됩니다. 뷰 모델이이를 수행해야합니다. 보기는 형식 사용자를 단일 이름 및 주소 문자열 -보기 모델로 변환하면 안됩니다.
이렇게하면 더 이상 바보가 아니며 작업이 덤프 및/또는 반복적이지 않으므로 "보기 모델"클래스를 만드는 것에 질려가 없습니다. 뷰 모델 클래스는 애플리케이션의 다른 클래스만큼 중요합니다.
나는 당신이 말한 모든 것에 동의합니다. 그러나 정수 배열과 같은 것들을 전달해야 할 때가 있습니다. ViewData를 사용하는 것은 매우 어색합니다.여기에 추상화 레이어가 필요하지 않습니다. – Alex
현재 프로젝트에서 150 개의 뷰가 있는데 때때로 하나의 객체 (배열, 엔티티 등)를 전달하지만 때때로 뷰가 복잡해지면 항상 뷰 모델을 만들고 아무 문제가 없습니다. 이것은 "모범 사례"는 아니지만 선과 단순의 균형이 잘 맞습니다. 보기에 많은 "클라이언트"가있는 경우 항상보기 모델을 먼저 만듭니다. 뷰가 엔터티에서 문자열 자체에 너무 많은 형식을 지정해야하는 경우 뷰 모델을 만듭니다. 나는 거의 속성이 아닌 뷰 모델을 거의 가지고 있지 않습니다. – queen3