将Form.ShowDialog()代码重构为MVP

时间:2010-08-09 05:35:25

标签: winforms design-patterns refactoring mvp

我有一个WinForm并且设置了很少的属性。
例如:表格上接受姓名,地址 (实际例子中有更多属性)

目前的实施与

有些相似
frmName frmView = new  frmName (); //frmName  is WINFORM 
frmView.Name= "ABC"; //any valid string or read this from file
frmView.Address="SomeAddress"; //any valid address or read this from file

if (frmView.ShowDialog() == DialogResult.OK)
{
    //OK CLICK PROCESS and
    // get new values edited by user
     string name = frmView .Name;
     string address = frmView.Address;
     doProcessing(name,address);
}
else{
  //Ignore cancel click..
}

如何将其转换为基于MVP的Winform应用程序 还需要将 ShowDialog() 上完成的处理重构为Presenter / Model
(不知道到底在哪里做)? 还需要避免在表单上编写代码。(被动视图)

全部谢谢。

1 个答案:

答案 0 :(得分:6)

我自己仍然在尝试不同的MVP方法,但我现在这样做的方式是这样的:

frmName frmView = new frmName();

if (frmView.ShowDialog() == DialogResult.OK) {
    presenter.RequestProcessing(frmView.Name, frmView.Address);
} else {
    //Ignore cancel click..
}

你说你想避免在表单上编写任何代码,但这对我没有意义。在Passive View中,您将所有特定于应用程序的请求传递给控制器​​或演示者。

在此示例中,视图处理与视图相关的逻辑。打开对话框不是用户操作,需要通知其他任何内容(例如演示者)。就像打开上下文菜单一样,对话框是此特定视图选择如何向用户提供这些特定于应用程序的请求的一部分。在用户实际使用它并提交请求之前,演示者不需要知道任何事情。

在某些情况下,我需要能够在对话框本身中处理错误,我已将IPresenter对象传递到对话框的构造函数中。例如,当单击“确定”按钮时,它可以自己制作适当的演示者请求,并且可以显示消息框,而不是在出现错误时关闭。

MVP有很多变化,但我希望这会有所帮助。好好设置它。