Add에 별도의 ViewModel이있을 필요는 없으며 편집 및 추가 시나리오를 수행해야하는 단일 ViewModel 만 있으면됩니다. 편집 페이지에서 레코드를 삭제할 수있는 경우 ViewModel도 삭제할 수 있어야합니다. ViewModel은 데이터에 관계없이 뷰가 노출하는 기능을 반영해야합니다.
각 모델에 대해 하나의 ViewModel을 재고해야한다고 생각합니다. 저는 ViewModels을 데이터가 삽입 된 정규화 동작이라고 생각합니다. 각 Model 클래스에 대해 ViewModel을 사용하면 조만간 아키텍처 문제가 발생할 것입니다. 애플리케이션을 위에서 아래로 보았을 때, UI가 무엇을 성취하려고하는지, 그리고 거기에서 ViewModel을 얻을 것이고, 결국에는 DataFactory에 접근 할 것이고, ViewModel이 데이터에 어떻게 매핑되는지는 거의 항상 1 대 1이 아닙니다. 가장 단순한보기. 1에서 1로 매핑하려고하면 UI가 좋지 않거나 데이터가 정상적으로 잘되지 않습니다. 우리가 여기
스택입니다 :
- 보기
- 뷰 모델
- 해당 DataFactory (지도 우리 POCO의 엔티티 프레임 워크 (사용자가보기에서 할 수있는 모든 우리의 POCO의에서 속성을 래핑을 제어합니다) 객체와 CRUD)
- POCO의 (비즈니스 로직, 모든 규칙 및 검증)
- 엔티티 프레임 워크 (모델, 데이터 액세스)
ViewModel에는 여러 POCO의 속성이 포함되어 있습니다.
우리는 MoU와 함께 xUnit을 사용하여 StructureMap 및 Unit Test를 통해 DataFactory를 주입합니다.
두 번째 질문에 답하기 위해 별도의보기 만 생성하여 사용자 정의 컨트롤로 드롭했습니다. 하지만 당신은 CRUD ViewModel을 가지고 있어야만 모든 기능을 사용자 친화적 인 방법으로 캡슐화 할 수 있습니다.
감사합니다.
그러면 고객 추가를위한 ViewModel을 어떻게 표현 하시겠습니까? 그리고 이후 ViewModel은 서비스/저장소가 데이터베이스에 저장하는 데 사용할 비즈니스 클래스에 값을 전송하기 때문에 어떤 용도로 사용됩니까? – azamsharp
응용 프로그램에 "고객 추가"탭이 있다고 상상해보십시오. 이 탭에는 이름, 주소, 계좌 번호 등의 텍스트 필드가있을 수 있습니다. 예를 들어, "SendToRepository"명령이있는 AddCustomerViewModel을 가질 수 있습니다. 이 중급 VM을 사용하는 이유 중 하나는 1) 그래픽 인터페이스를 애플리케이션 로직과 분리함으로써 앱 로직의 테스트 용이성을 가능하게 할뿐만 아니라 UI 레이어를 거의 변경하지 않아도된다는 것입니다. 2) ViewModel은 UI와 비즈니스 레이어간에 데이터를 적용하고, 코드를 간소화하는 데 사용됩니다 (예 :더 적은 컨버터가 필요함) –
계속 : 3) 종종 View와 ViewModel 사이의 데이터 바인딩은 더 깨끗한 코드를 생성하며, 가장 중요한 것은 애플리케이션 로직이 ViewModels를 변경하고 View 및 해당 리소스를 직접 조작하려고 시도하지 않는 경우 더 나은 코드입니다. –