2011-04-19 77 views
2

我试图去掌握不同的模式(MVP,MVVM等),并找到一个适合我的需求。毕竟我还没有确定。希望有人能为我阐明这一点。模型,视图,视图模型和演示器

目前我有一个WPF视图,它实现了一个接口ICustomView。这个接口被注入到我的Presenter中。然后,演示者负责订阅数据,管理订阅等。当数据返回给演示者时,它会针对模型(CustomBusinessObjects的IObservable集合)调用各种方法。它使用接口ICustomView执行此操作,因为IObservable是模型的一个属性。

我看到的这个问题是模型与视图耦合太多。演示者还决定对模型调用哪些方法。目前,视图由一个WinForms网格组成,这由ICustomView公开,允许演示者根据视图调用方法。但它增加了Presenter和View的耦合,这使得很难换出这个WinForms网格的WPF网格或图表等

我正在考虑使模型完全独立的实体可以说IModel与单一方法ProcessUpdate字符串主题,IMessage有效载荷)。这会将逻辑从演示者转移到模型中。这也意味着不止一种观点可以分享相同的模型。自定义模型可以具有用于特定定制的额外界面,但演示者只需要了解IModel。

这听起来像一个合理的想法?我在这里错过了什么吗?

任何意见赞赏。

感谢

+0

WPF或Silverlight = MVVM,ASP.NET = MVP或MVVM – SQLMason 2011-04-19 14:54:14

回答

3

我建议从MVP切换到MVVM,因为您使用的是WPF。如果您使用ASP.Net或WinForms,我只会使用MVP。

话虽这么说,你的MVVM对象将是:

型号:简单的数据对象。它不应该包含任何功能,如保存或编辑,但可以具有验证逻辑。

查看:您的用户界面。我通常做我的ViewModel类类型的DataTemplate。它应该绑定到你的ViewModel的属性和命令。

ViewModel:这件作品结合了两者。显示在视图中的任何数据都应绑定到ViewModel中的一个属性。视图中的任何命令(如按钮点击)也应该指向ViewModel中的方法。

例如,当用户在View上点击一个GetCustomer按钮时,ViewModel应该接收该命令,去获取CustomerModel,并展示它的属性以便视图绑定。当用户点击保存时,ViewModel应验证模型是有效的,然后使用其CustomerModel属性执行保存代码。

0

个人而言,使用WPF的时候我更喜欢使用WPF数据网格,并将其绑定到在MVVM模式一个DataContext。我认为你需要摆脱的第一件事是WinForms网格(只要你使用WinForms网格,就几乎不可能分离你的模型/视图。)

我会研究一些不同的东西。

  • MVVM模式
  • WPF的DataGrid
  • 绑定的DataGrid到一个DataContext

一旦你到这一点,所有你需要做的就是更新你的datacontext,你的视图将随之更新。