문제

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 패턴을 따르지 않는 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top