【问题标题】:Coordinating MVP triads协调 MVP 三元组
【发布时间】:2011-05-13 23:36:14
【问题描述】:

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

选项 1 一个协调器对象,它“拥有”每个模型并通过订阅每个模型中的必要事件来照顾协调,然后决定在什么场景中调用什么模型方法。

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

选项 2 一个演示者“拥有”另一个演示者,当模型中发生感兴趣的事情时,演示者使用另一个演示者来推动交流。

担心演示者不应该有一个公共界面(演示者优先的方法),这打破了这一点。

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

【问题讨论】:

    标签: winforms mvp ooad


    【解决方案1】:

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

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

    界面:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多