我正在学习被动视图模式,以使我的 C# WinForms 应用程序更易于测试和维护。
到目前为止它运行良好,但我想知道是否有比我现在做的更好的方法来实现事件(并保持它们可测试)。这就是它的样子(省略与本示例无关的代码)。基本上我正在寻找是否有一种方法可以跳过演示者和表单中的事件,我宁愿在演示者中完成所有工作。
我的观点是这样的:
public interface IApplicationView
{
event EventHandler Find;
}
我的主持人看起来像这样:
public class ApplicationPresenter
{
private IApplicationView _view;
private IApplicationDomain _domain;
public ApplicationPresenter(IApplicationView view) : this(view, new ApplicationDomain()) {}
public ApplicationPresenter(IApplicationView view, IApplicationDomain domain) {
_view = view;
_domain = domain;
HookupEventHandlersTo(view);
}
private void HookupEventHandlersTo(IApplicationView view)
{
view.Find += delegate { FindAction(); };
}
public void FindAction()
{
// ...
}
}
我的 WinForm 看起来像:
public partial class Form1 : Form, IApplicationView
{
private ApplicationPresenter _presenter;
public event EventHandler Find = delegate {};
public Form1()
{
InitializeComponent();
_presenter = new ApplicationPresenter(this);
HookupEvents();
}
private void HookupEvents()
{
searchButton.Click += Find;
}
}
谢谢!