winforms – MVP主持人之间的沟通?

在使用MVP时,我有一个关于如何处理演示者之间的沟通的问题。说我有两个MVP三合一。一个是产品列表(Triad A),另一个是关于当前选择的产品(Triad B)的一些一般信息。

由于所选产品已经被A更改,我如何告诉Presenter B需要更新?我当然可以想到这样做的方法,但我想知道如果有一个一般的惯例如何处理这个。

提前感谢任何想法!

最佳答案
模式本身并没有真正规定如何处理这个问题。

我自己的偏好是一个消息/事件中心,主持人可以注册某些事件的兴趣。它可以防止复杂的依赖关系树,并保持演示者的可测试性。

例如:

class PresenterA
{
   void HandleProductSelectionChanged(int productId)
   {
      EventHub.Publish(EventType.ProductChanged, productId);
   }
}

class PresenterB
{
    void PresenterB
    {
       EventHub.Register(EventType.ProductChanged, HandleProductChanged);
    }

    public void HandleProductChanged(object state)
    {
       var productId = (int)state;
       var productDetails = LoadProductDetails(productId);
       view.DisplayProductDetails(productDetails);
    }
}

EventHub将保留每个事件类型的用户调用列表。

您保留可测试性 – 只需调用HandleProductChanged来查看PresenterB如何响应新产品选择。

唯一的缺点(就像任何一种模式)都是引入一个间接的级别。如果PresenterA直接调用PresenterB,或者PresenterB听PresenterA上的一个事件,那么立即就会明显发生什么。

在这种方法中,您将有额外的步骤查看EventType.ProductChanged,然后查找哪个Presenters注册了该事件的兴趣。

在我自己的经验中,单一层次的间接是非常值得你得到的模块化。

转载注明原文:winforms – MVP主持人之间的沟通? - 代码日志