미끄러운 경사면에 오신 것을 환영합니다. 이 시점에서 모든 모델 뷰 상호 작용의 끝없는 변형이 있음을 깨달았습니다. MVC, MVP (Taligent, Dolphin, Passive View), MVVM 등이 그 예입니다.
대부분의 건축 패턴과 마찬가지로 Model View Presenter 패턴은 다양한 다양성과 실험에 열려 있습니다. 모든 변형이 공통적으로 갖는 한 가지는 뷰와 모델 사이의 "중간자"로서 발표자의 역할입니다. 가장 일반적인 두 가지는 수동보기 와 감독 발표자 / 컨트롤러 -[ 파울러 ]입니다. 수동보기 는 UI를 사용자와 발표자 간의 매우 얕은 인터페이스로 취급합니다. 발표자에게 많은 책임을 위임하는 논리가 거의 포함되어 있지 않습니다. 감독 발표자 / 컨트롤러많은 UI 프레임 워크에 내장 된 데이터 바인딩을 활용하려고합니다. UI는 데이터 동기화를 처리하지만보다 복잡한 논리를 위해 발표자 / 컨트롤러 단계를 처리합니다. 두 경우 모두 모델,보기 및 발표자가 트라이어드를 형성합니다.
이를 수행하는 방법에는 여러 가지가 있습니다. 각 대화 상자 / 양식을 다른보기로 처리하여이를 처리하는 것이 매우 일반적입니다. 많은 경우 뷰와 발표자간에 1 : 1 관계가 있습니다. 이것은 어렵고 빠른 규칙이 아닙니다. 한 발표자가 여러 관련보기를 처리하거나 그 반대의 경우도 마찬가지입니다. 그것은 모두보기의 복잡성과 비즈니스 로직의 복잡성에 달려 있습니다.
뷰와 발표자가 서로에 대한 참조를 얻는 방법에 관해서는 이것을 때로는 배선 이라고 합니다. 세 가지 선택이 있습니다.
보기는 발표자에 대한 참조를 보유합니다
. 양식 또는 대화 상자는보기를 구현합니다. 이 양식에는 직접 함수 호출을 사용하여 발표자에게 전달되는 이벤트 핸들러가 있습니다.
MyForm.SomeEvent(Sender)
{
Presenter.DoSomething(Sender.Data);
}
발표자는 뷰에 대한 참조를 가지지 않으므로 뷰는 뷰로 데이터를 인수로 보내야합니다. 발표자는보기에서 수신해야하는 이벤트 / 콜백 기능을 사용하여보기와 다시 통신 할 수 있습니다.
발표자는보기에 대한 참조를 보유합니다
. 시나리오에서보기는 사용자에게 표시되는 데이터의 속성을 표시합니다. 발표자는 이벤트를 수신하고보기의 특성을 조작합니다.
Presenter.SomeEvent(Sender)
{
DomainObject.DoSomething(View.SomeProperty);
View.SomeOtherProperty = DomainObject.SomeData;
}
둘 다 순환 종속성을 형성하는 서로에 대한 참조를 보유합니다.
이 시나리오는 실제로 다른 시나리오보다 작업하기가 더 쉽습니다. 보기는 발표자에서 메소드를 호출하여 이벤트에 응답합니다. 발표자는 노출 된 속성을 통해보기에서 데이터를 읽거나 수정합니다.
View.SomeEvent(Sender)
{
Presenter.DoSomething();
}
Presenter.DoSomething()
{
View.SomeProperty = DomainObject.Calc(View.SomeProperty);
}
MVP 패턴과 관련하여 고려해야 할 다른 문제가 있습니다. 결선 순서, 객체 수명, 배선이 이루어지는 위치, MVP 트라이어드 간의 통신이지만이 답변은 이미 오래 전부터 성장했습니다.