MVVM最常用于WPF,因为它非常适合。但是对于Windows Forms呢?是否有一种既被广泛采用的方法/设计模式也能很好地与Windows Forms配合使用? 是否有书籍或文章能够描述得很好呢?也许基于MVP或MVC的方法可行吗?
MVVM最常用于WPF,因为它非常适合。但是对于Windows Forms呢?是否有一种既被广泛采用的方法/设计模式也能很好地与Windows Forms配合使用? 是否有书籍或文章能够描述得很好呢?也许基于MVP或MVC的方法可行吗?
有两种MVP模式(a)被动视图和(b)监督控制器
对于复杂的数据绑定场景,我更喜欢使用监督控制器模式。在监督控制器模式中,数据绑定任务由视图负责。因此,对于TreeView/DataGrid,这应该在相应的视图中完成,只有与视图无关的逻辑才应该移至Presenter。
我建议查看以下MVP框架:MVC# - MVP框架
不要被名字所迷惑(它是一个MVP框架)。
简单的WinForms MVP视频:WinForms-MVP
处理下拉列表的示例:MVP-DropDownList
以下是代码片段...尚未经过测试,直接从思路键入....
public interface IYourView
{
void BindTree(Model model);
}
public class YourView : System.Windows.Forms, IYourView
{
private Presenter presenter;
public YourView()
{
presenter = new YourPresenter(this);
}
public override OnLoad()
{
presenter.OnLoad();
}
public void BindTree(Model model)
{
// Binding logic goes here....
}
}
public class YourPresenter
{
private IYourView view;
public YourPresenter(IYourView view)
{
this.view = view;
}
public void OnLoad()
{
// Get data from service.... or whatever soruce
Model model = service.GetData(...);
view.BindTree(model);
}
}
再次强调,我们能否在WinForms中使用MVVM? 是的,我们拥有所有的组件。我们只需要把它们粘合在一起就可以了。
如果想了解更多正式的“模式”,可以参考使用Microsoft .NET的企业解决方案模式。
(来源:microsoft.com)
以下是一些例子:
我认为MVP模式非常适合WinForms开发,这在Microsoft的WinForms框架CAB中得到了部分证明。
我在WinForms中使用MVP来提取代码,因为无法测试View代码。此外,还可以使需要重用(或重复)的代码保持不在View中,因此无法共享。
我可以参考我自己的项目,其中我使用了MVP模式ExceptionReporter.NET。虽然我确定我没有完美地使用它。
你提到MVVM适用于WPF - 我认为原因是因为WPF有很强的数据绑定支持。如果你在WPF中没有使用数据绑定(当然并不是强制性的),那么可以选择MVP。重点是,MVP对于任何客户端应用程序都是一个强有力的选择。即使在WPF中,如果您计划在不是WPF的项目之间共享代码,MVP可能是一个“更好”的选择。
了解在WinForms中使用MVP的价值,可观看Boodhoo关于使用MVP的视频演示: http://www.bestechvideos.com/2008/06/29/dnrtv-show-14-jean-paul-boodhoo-on-model-view-presenter 以及该作者撰写的MSDN文章: http://msdn.microsoft.com/en-us/magazine/cc188690.aspx
我读过的第一个好的UI设计模式解释是Jeremy Miller的博客 - Building Your Own CAB。它描述了常见的模式 - 被动视图(Passive View)、MVP等,并介绍了在C#中实现它们的一些方法。