MVP中的接口和类

时间:2013-07-02 18:05:39

标签: c# .net mvp

我有以下简单的Presenter和View(MVP)代码。我无法理解,我们只是将视图构造函数中的视图(即“this”)传递给演示者实例。但是,在演示者类中,我们有一个接口作为参数。我注意到,我们在View中实现了界面。但是,当它接受的参数是Presenter类构造函数中的接口时,我不明白我们如何能够传递类(使用“this”的视图实例)。

请解释一下。我有点新鲜。

interface IApplicationConnection
{
   string Connect { get; set;}
   void SetText(string text);
}

public partial class MyForm : Form, IApplicationConnection
{
  private Presenter _presenter;

  public MyForm()
  {
    InitializeComponent();
    _presenter = new Presenter(this);
  }

  public string Connect { get; set; }
}

演示者类:

public class Presenter
{
  IApplicationConnection _view;
  public Presenter(IApplicationConnection view)
  {
     _view = view;
  }

  public void Clicked()
  {
    _view.SetText("Clicked");
  }
}

4 个答案:

答案 0 :(得分:4)

从你写的东西来看,似乎你不确定“这个”是什么意思。实际上,当在一个实例(非静态!)方法中,“this”总是引用该方法所属的实例并执行该实例。

在您的示例中,“this”指的是MyView实例。由于该类实现了您的接口,您可以将其传递给presenter构造函数。

假设您的类实现了三个接口:

public class A : I1, I2, I3 ...

你要传递给

public void Foo( I1, I2, I3 )

那么在课堂上调用Foo是合法的

Foo( this, this, this )

由于该类实现了多个接口,因此它可以“构成”三个不同的规范,表示为接口。

答案 1 :(得分:1)

this是该类的实例

MVP做了一些关注点分离,你可以轻松地用模拟视图测试演示者,因为你是通过接口注入的。

答案 2 :(得分:1)

您可以传递类的实例,因为该类必须实现在演示者中作为参数传递的接口。

这通过构造函数称为依赖注入。这样,它使设计解耦,因为演示者不必担心或了解接口IApplicationConnection_view的实现。它只知道即将发生的功能已实现。

此外,MVP模式变得更加可测试,因为您可以使用假对象模拟视图并在单元测试中测试您的演示者。我希望这一切对你都有意义。

答案 3 :(得分:1)

这就是接口的工作原理。您可以将类的实例传递给任何接受

的方法
  • 这个确切的类
  • 任何基类
  • 该类实现的任何接口。