我有更多的架构问题。我正在尝试在C#中实现MVP,如下所示:
我有时需要做的是打开其他形式。例如,我使用DataGrid浏览器视图,当我双击网格项或选择某个内容并单击编辑按钮时,会引发编辑事件并且Presenter会起作用。
现在,Presenter需要打开一个Editor视图,它也是一个Form,但是问题是,演示者不应该构造Form本身,因为那样就不可能模拟View。 / p>
我正在努力适应这个概念。我的代码看起来像这样:
var editorView = new EditorForm();
editorView.Presenter.Entity = SelectedEntity;
editorView.ShowDialog(View as Form);
在幕后,EditorForm构造函数构造演示者并将 this (View实例)分配给演示者:
public EditorForm()
{
Presenter = new EditorPresenter(this);
InitializeComponents();
}
从View的角度来看,我可以简单地通过实现Mock然后从MockView的构造函数中实例化相同的Presenter来将它交换到MockView。
我在这里和网上搜索其他一些Q& A但没有找到合适的。
感谢您的所有提示。
答案 0 :(得分:0)
如果我理解你的观念, 我建议您按照主视图的方式根据MVP模式投影编辑演示文稿问题。 因此,创建IEditView和EditPresenter,最后在主演示者中创建EditPresenter的实例。通常通过其演示者控制编辑视图。
答案 1 :(得分:0)
在与一些朋友进行了一些头脑风暴之后,我们得出结论,处理实例化不同的生产视图集(FormViews)和不同的测试集(MockViews)的情况的最佳方法是在某些上下文中构建它们 - 我的情况,Spring上下文是一个选项。
到目前为止,我认为这是问题的答案。如果您有更聪明的解决方案,请随时分享!