我有以下简单的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");
}
}
答案 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)
这就是接口的工作原理。您可以将类的实例传递给任何接受
的方法