我有更多的建筑问题。我正在尝试在 C# 中实现 MVP,如下所示:
- IView 创建 Presenter
- IPresenter 有一个属性 IView,它持有 View,绑定到它
- View可以是Form,但是Presenter不区分Form和非Form类型,所以View可以互换,解决方案是可测试的
我有时需要做的是打开其他表单。例如,我有 DataGrid 的浏览器视图,当我双击一个网格项目或选择某些内容并单击编辑按钮时,会引发编辑事件并且 Presenter 动作。
现在,Presenter 需要打开一个 Editor 视图,它也是一个 Form,但问题是,Presenter 不应该自己构造 Form,因为这样就不可能 Mock 视图。
我在正确的概念上很挣扎。我的代码看起来像这样:
var editorView = new EditorForm();
editorView.Presenter.Entity = SelectedEntity;
editorView.ShowDialog(View as Form);
在后台,EditorForm 构造函数构造了演示者并将这个(视图实例)分配给演示者:
public EditorForm()
{
Presenter = new EditorPresenter(this);
InitializeComponents();
}
从 View 的角度来看,我可以简单地通过实现 Mock 然后从 MockView 的构造函数实例化相同的 Presenter 来将其交换为 MockView。
我在这里和网上搜索了一些其他的问答,但没有找到合适的。
感谢您的所有提示。