MVP에서 아동 전망의 조정은 어떻게 가장 잘 처리됩니까?
-
22-07-2019 - |
문제
Winforms에서 MVP를 사용하려고 시도하고 있으며 아동 전망 간의 조정을 가장 잘 처리하는 방법에 대해 혼란스러워합니다.
예를 들어, 나는 두 개의 자녀 견해가있는 부모보기가 있습니다. 한 어린이보기의 이벤트는 두 번째 아동 전망에서 조치를 취해야합니다.
부모보기가 이것을 직접 제어해야합니까? 이 작업을 수행하여 MVP 패턴을 우회하는 것 같습니다.
아니면 자식보기가 서로를 생성자 매개 변수로 받아야합니까? 이 경우 첫 번째 자식보기에 의해 이벤트가 해고되었을 때, 두 번째 자식보기가 이벤트를 받고 발표자에게 무언가가 발생했다고 알릴 것입니까? 그런 다음 발표자는 두 번째 어린이에게 무엇을 해야하는지 알리기 위해 첫 번째 자식보기 (모르는)에서 데이터를 가져와야합니다. 복잡한 것 같아서 뭔가 빠진 것 같은 느낌이 듭니다.
상황에 대한 의사 코드는 다음과 같습니다.
public class ParentView : UserControl, IParentView
{
private ChildViewOne childViewOne;
private ChildViewTwo childViewTwo;
private ParentViewPresenter presenter;
private RegisterEvents()
{
childViewOne.EventOccured += new EventHandler(HandleEvent);
}
private void HandleEvent()
{
childViewTwo.DoSomething();
}
}
해결책
당신은 볼 수 있습니다 이벤트 애그리 게이터 패턴. 모든 것을 느슨하게 결합 할 수 있습니다. 프리즘에는 하나와 함께 제공되며 전체 프리즘 프레임 워크/라이브러리를 구매하지 않고도 쉽게 사용할 수 있습니다.
그러면 코드가 다음과 같이 보일 수 있습니다.
public class ChildViewOne {
private IEventAggregator evtAggregator;
public ChildViewOne(IEventAggregator evtAggregator) {
this.evtAggregator = evtAggregator;
}
private void OnEventOccured(){
evtAggregator.GetEvent<EventOccured>().Publish();
}
}
publish class ChildViewTwo {
private IEventAggregator evtAggregator;
public ChildViewTwo(IEventAggregator evtAggregator) {
evtAggregator.GetEvent<EventOccured>().Subscribe(OnEventOccured);
}
private void OnEventOccured() {
// Do something here...
}
}
편집 : Brian Noyes는 Prism Event Aggregator를 Winforms로 포팅했습니다. 확인 해봐 여기, 그의 블로그에서
다른 팁
생성자에서 다른 어린이 견해를 취하는 것은 나쁜 생각처럼 보입니다. 앞으로 다른 어린이보기를 추가해야한다면 어떻게 하시겠습니까?
부모의 견해를 통해 자녀 이벤트를 라우팅하면 더 나을 것입니다. 부모의 견해를 통해 이벤트를 진행하면 MVP를 어떻게 위반하고 있습니까?
나는 SiblingView (또는 앱의 비즈니스 컨텍스트를 고려할 때 더 적절한 것)라는 Ichildview 인터페이스의 속성을 만들 것입니다. 생성자에 파라로 추가 할 필요조차 없지만 인터페이스에 setsiblingView ()라는 메소드가 포함되어 있습니다. 생성자에서 호출 할 수 있습니다. 그런 다음 onsiblingEventFired () 이벤트를 가질 수 있습니다.
그것은 나에게 덜 복잡해 보인 것처럼 보이지만 아마도 그것은 일반적으로 내가 과거에 이런 유형의 문제에 접근 한 방식 때문일 것입니다.
그러나 부모 제어가 너무 많은 세부 사항을 알지 못하고 MVC 패턴을 따르지 않는 것 같습니다.