协调MVP三合会

时间:2010-11-22 17:12:28

标签: winforms mvp ooad

假设您的应用程序中有多个MVP三元组(WinForms .NET 2.0应用程序),并且每个三元组都负责一个责任区域。协调MVP三元组之间沟通的首选方式是什么?

选项1 协调器对象“拥有”每个模型并通过订阅每个模型中的必要事件来查看协调,然后决定在什么情况下调用哪些模型方法。

担心这可能是一个“神”类。

选项2 演示者“拥有”另一个演示者,当模型中出现感兴趣的内容时,演示者使用另一个演示者来移动通信。

担心主持人不应该有一个公共界面(Presenter-first方法),这会破坏它。

我只是想知道其他人以可扩展的OO方式做了什么来解决这个问题。如果我添加另一个MVP三合会怎么办?把它融入我的协调员有多难?必须有一些很好的例子来说明如何在WinForms应用程序中管理多个MVP三元组?

1 个答案:

答案 0 :(得分:3)

不要模糊......但这取决于。我过去使用过的两种方法:

  1. 使用Event Aggregator模式,让各个演示者触发其他演示者可以处理的事件。例如PresenterA执行:events.Raise<MyEvent> ()和PresenterB实现:IHandler<MyEvent>并在其public void Handle (MyEvent @event)方法中做出相应的反应。
  2. 使用注入需要协调的演示者的共享模型。例如,如果一个演示者处理给定Foo的选择,而另一个演示者需要使用Foo细节更新细节面板,我可能会使用IFooSelection状态模型并将其注入需要协调“当前选择”概念的两个演示者”。
  3. 界面:

    public interface IFooSelection {
        public event EventHandler Changed;
        Foo Selected { get; set; }
    }