题
假设您的应用程序(WinForms .NET 2.0 应用程序)中有多个 MVP 三元组,每个三元组负责一个职责领域。您协调 MVP 三人组之间沟通的首选方式是什么?
选项1通过订阅每个模型的必要事件,然后决定在哪种情况下调用哪种模型方法,将“具有”每个模型的协调对象,并照顾协调。
担心这可能是一个“神”类。
选项2主持人“有”另一位主持人,当模型中发生某些有趣的事情时,演示者会使用其他演示者移动通信。
担心演示者不应该有公共界面(演示者优先方法),这打破了这一点。
我只是想知道其他人做了什么来以可扩展的面向对象方式解决这个问题。如果我添加另一个 MVP 三合会会怎样?将其融入我的协调器有多难?一定有一些很好的例子来说明如何在 WinForms 应用程序中管理多个 MVP 三元组?
解决方案
不能含糊...但这取决于。我过去使用过的两种方法:
- 使用 事件聚合器 模式,并让各个演示者发起其他演示者可以处理的事件。例如PresenterA 执行以下操作:
events.Raise<MyEvent> ()
PresenterB 实现:IHandler<MyEvent>
并相应地做出反应public void Handle (MyEvent @event)
方法。 - 使用注入到需要协调的演示者中的共享模型。例如,如果一个演示者处理给定 Foo 的选择,而另一个演示者需要使用 Foo 详细信息更新详细信息面板,我可能会使用 IFooSelection 状态模型并将其注入需要协调“当前选择”概念的两个演示者中'。
界面:
public interface IFooSelection {
public event EventHandler Changed;
Foo Selected { get; set; }
}
不隶属于 StackOverflow