Martin Fowler의 프레젠테이션 모델 노트 및 프레젠테이션 모델에 대한 MSDN 설명서에 따르면 프레젠테이션 모델 클래스는 UI 클래스 및 이와 유사하게 비즈니스를 인식하지 못한다고 설명합니다 모델 클래스는 프레젠테이션 모델 클래스를 인식하지 못합니다.프레젠테이션 모델을 사용하여 부모 폼 자식 폼 관계를 처리하는 모범 사례
UI는 프레젠테이션 모델에 광범위하게 데이터 바인딩되어야하며, 프레젠테이션 모델은 차례대로 하나 이상의 도메인/비즈니스 모델 개체와 공동 작업하여 작업을 완료합니다. 프레젠테이션 모델은 기본적으로 UI에서 최대 데이터 바인딩을 용이하게하는 방식으로 도메인 모델 데이터를 제공하므로 UI가 가능한 한 적은 의사 결정을 할 수있게하여 프레젠테이션 동작의 테스트 가능성을 높입니다. 이는 또한 프리젠 테이션 모델 클래스를 일반적인 것, 즉 임의의 특정 UI 기술에 대해 불가지론하게 만든다.
List 폼 (CustomerList)이 있고 다른 루트 폼 (Customer)이 있고 버튼 클릭시 CustomerList 폼에서 고객을 편집 할 수있는 사용 사례가 있다고 가정 해보십시오.
간략하게하기 위해 고객 목록이 메뉴 (즉, 고객 메뉴 클릭)에서 열리고 고객 목록이 메뉴 클릭 이벤트에서 표시된 경우 일부 동작이 발생했다고 간주하십시오.
이제 위의 사용 사례에 따라 고객 목록에서 Customer Root UI (단일 고객)를 열어야합니다. 어떻게해야합니까?
편집 버튼의 클릭 이벤트에 필요한 객체 (BusinessModel, PresentationModel, UI)를 빌드하고 거기에서 CustomerEdit UI를 호출 하시겠습니까?
프레젠테이션 모델 클래스에서 CustomerEdit UI를 빌드하고 프레젠테이션 모델에서 UI를 표시 하시겠습니까? 아래의 두 가지 방법 중 하나로이 작업을 수행 할 수 있습니다. a. 다음 순서로 개체를 만듭니다. DomainModel-> PresentationModel-UIForm b. Unity.Resolve()를 사용하십시오. 어느 쪽이든, P 모델이 CustomerEdit이있는 구체적인 UI 어셈블리를 참조해야하므로 Presentation Model을 위반합니다. 또한 P 모델은 WinForm을 참조하고 사용하여 직접 UI 기술에 대한 불가지론을 덜어 줘야합니다.
위반 사항은 이론적으로 무시할 수 있지만 잘못된 방향으로 가고 있는지에 대한 커뮤니티 의견을 구합니다. 목록 (학부모) 양식에서 하위 양식을 호출하는 더 좋은 방법이 있는지 제안하십시오.
- Rajarshi
"모델에서 UI에서 뭔가를 참조합니다"라고 말하면 도메인 모델 또는 프리젠 테이션 모델을 의미합니까? 도메인 모델 (Domain Model)을 말하면 더욱 강경 한 규율 인 "Separation of Concerns"에 위배되므로 동의하지 않을 것입니다. 프레젠테이션 모델을 말하면 동의하지만 여전히 더 나은 제안과 권장 사항을 찾고 있습니다. – Rajarshi
또한 UI가있는 경우에도 인터페이스로 작업 할 것을 제안합니다. UI 코드의 성격 (모든 곳의 이벤트)을 고려하면 너무 실용적 일 것입니다. 그런 식으로, 아키텍처가 유지할 수있는 클래스의 수를 생각해보십시오. 1. 도메인 모델 2. 도메인 모델 인터페이스 3. 프리젠 테이션 모델 4. 프리젠 테이션 모델 인터페이스 5. UI 인터페이스 6. UI 인터페이스 – Rajarshi