mvp模式中winforms之间的通信

Ale*_*zle 9 mvp design-patterns communication winforms

我正在处理开发我的应用程序的一个大问题.它是C#上实现Model-View-Presenter模式的Winforms基础应用程序,但我是这个方法的新手.我到处搜索,但没有找到我的问题的答案.

我需要知道如何使用这种模式来允许winforms之间的通信,以及演示者如何在不将演示者与表单耦合的情况下显示它们.我已经看到了使用Factory模式的方法,但是不明白如何实现它.

任何帮助或指向正确的方向将不胜感激.

小智 3

断言

Presenter 负责视图和模型之间的协调(如果遵循被动视图实现)。

这可能看起来像:

实例化 Presenter 并将其自身注入 Presenter 的 View:

IPresenter presenter;
public View() { presenter = new Presenter(this) }
Run Code Online (Sandbox Code Playgroud)

演示者实例化一个或多个视图并将其自身注入到视图中:

IView1 view1;
public Presenter() { view1 = new View1(this) } 

IView1 view1;
IView2 view2;
public Presenter() { view1 = new View1(this); view2 = new View2(this); }
Run Code Online (Sandbox Code Playgroud)

例子

在您的情况下,协调多个视图的演示者可能看起来像这样(伪):

public class Presenter : IPresenter
{
  IView1 view1;
  IView2 view2;
  public Presenter() 
  {
    view1 = new View1(this);
    view2 = new View2(this);
  }

  private WireViewEvents()
  {
    view1.OnButtonClick += HandleButtonClickFromView1;
  }

  public void HandleButtonClickFromView1()
  {
    view2.SetSomeData();
    view2.Show();
}
Run Code Online (Sandbox Code Playgroud)

在此示例中, 引发的事件由View1Presenter 处理,数据在 中设置View2,并View2显示。

请记住,无论您的实现是什么,MVP 的目标都是:

  • 关注点分离(UI 与域逻辑分离)。
  • 增加可测试性。

请注意,这只是演示者如何协调多个视图的基本示例。如果您想从演示者中抽象视图创建,您可以将创建的内容移动到演示者调用的另一个容器中以创建视图并订阅其事件。