4

我有更多的建筑问题。我正在尝试在 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。

我在这里和网上搜索了一些其他的问答,但没有找到合适的。

感谢您的所有提示。

4

2 回答 2

0

如果我理解您的概念,我建议您根据 MVP 模式投影编辑演示文稿问题,就像您对主视图所做的那样。所以创建 IEditView 和 EditPresenter,最后在主演示者中创建 EditPresenter 的实例。一般通过它的presenter控制编辑视图。

于 2013-04-28T22:33:10.120 回答
0

在与一些朋友进行头脑风暴后,我们得出结论,处理实例化不同的生产视图集(FormViews)和不同的测试集(MockViews)的最佳方法是在某些情况下构建它们 - 就我而言, Spring 上下文是一个选项。

到目前为止,我认为这是问题的答案。如果您有更聪明的解决方案,请随时分享!

于 2013-04-29T07:52:04.847 回答