Winforms 응용 프로그램을 다시 만들고 UI에 변형 Presentation Model pattern을 사용하고 싶습니다. 누군가 올바르게 설명하면 다음 설명에서 알려주시겠습니까?MVP/Presentation Model UI 패턴을 올바르게 구현합니까?
나는 다음과 같은 종속성을 설정하기로 결정했습니다 :
Model <---- Presentation Model <---- View
즉 :
모델 자체를 제외하고 아무것도 인식하지 못합니다.
프리젠 테이션 모델에는 모델에 대한 참조가 있습니다 (반대의 경우도 마찬가지 임).
보기에는 프레젠테이션 모델에 대한 참조가 있지만 그 반대의 경우는 아닙니다.
Winforms 데이터 바인딩을 사용하여보기 및 프레젠테이션 모델을 동기화합니다.
이제는이 모든 것이 매력처럼 작동합니다. 양식의 "닫기"버튼을 클릭하십시오. 프리젠 테이션 모델에는 뷰에 대한 참조가 없으므로 뷰에서 게시 한 이벤트를 구독 할 수 없습니다. 따라서 나는 다음과 같은 목발을 마련했습니다
Presentation Model View
+--+ +--+
| | | |
| | | <--------X closeButton.Click event fires
| | | |
| | +--------X |
| | CloseRequested = true | | |
| | +--------> |
| | | |
| | CloseRequested CloseRequested | |
| <-----------------------------------< |
| | | |
| X--------+ | |
| | | IsClosed = true | |
| <--------+ | |
| | | |
| | IsClosed MustClose | |
| >-----------------------------------> |
| | | |
| | | X--------> view.Close()
| | | |
+--+ +--+
즉 :
사용자는 "닫기"버튼을 클릭합니다.
단추의
Click
이벤트는 뷰에 캡처되며,이 속성은CloseRequested
속성을 설정하여 반응합니다.데이터 바인딩은이 값을 프레젠테이션 모델의 해당 속성으로 전송합니다.
프리젠 테이션 모델은 해당 속성
IsClosed
을 설정하여이 변경에 반응합니다.데이터 바인딩은이 값을보기의
MustClose
으로 전송합니다.보기 자체가 닫히면이 변경 사항에 반응합니다.
프리젠 테이션 모델
아주 잘보기에서 분리되고, 반대의 경우도 마찬가지 그러나 이 많은 작업은 하나의 버튼 명령을 처리하는 것입니다. 내가 결정한 의존성 그래프를 보면 더 쉬운 방법이 있을까요?
MVP에는 여러 가지 변형이 있으며 두 가지 방법이 모두 수행 된 것으로 보았습니다. 설명하는 접근 방식에서 발표자는 모델과 IView 모두에 의존하게됩니다. 또한, 모든 뷰는 모든 IView 메소드를 처리하는 데 필요합니다. 처리하지도 신경 쓰지도 않습니다. 이 접근법에서 발표자는 모델에만 의존하며보기는 발표자에 따라 다릅니다. – Rich
아니요, 프레젠테이션 모델이 MPV와 다른 접근 방식입니다. Thread Starter는 단위 테스트가 쉬워야하므로 UI에 대한 참조가 없어야합니다. – ktutnik
@ktutnik Presenter는 Unit 컨트롤을 사용하여 Presenter 클래스를 테스트 할 수 있도록 View 컨트롤이 아닌 IView 인터페이스에 대한 참조를 가져 왔습니다. – Arseny