模型,视图,视图模型和演示者

时间:2011-04-19 14:06:23

标签: wpf mvvm mvp

我正试图掌握不同的模式(MVP,MVVM等)并找到一个适合我需要的模式。毕竟我读完之后还不确定。希望有人可以为我阐明这一点。

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

我看到的问题是模型与视图太耦合了。此外,Presenter还决定针对模型调用哪些方法。目前View包含一个WinForms网格,ICustomView公开了它,允许Presenter针对View调用方法。然而,它增加了Presenter和View的耦合,这使得很难将这个WinForms网格替换为WPF网格或图表等

我正在考虑使模型成为一个完全独立的实体,可以使用单个方法ProcessUpdate(字符串主题,IMessage有效负载)来说IModel。这会将逻辑从演示者转移到模型中。这也意味着不止一个视图可以共享相同的模型。自定义模型可以具有用于特定自定义的附加接口,但是Presenter只需要了解IModel。

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

任何建议表示赞赏。

谢谢

2 个答案:

答案 0 :(得分:3)

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

话虽如此,你的MVVM对象将是:

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

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

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

例如,当用户点击View上的GetCustomer按钮时,ViewModel应该接收命令,go并获取CustomerModel,并公开它要绑定的View的属性。当用户点击Save时,ViewModel应验证Model是否有效,然后使用其CustomerModel属性执行Save代码。

答案 1 :(得分:0)

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

我会研究一些不同的事情。

  • MVVM模式
  • WPF DataGrid
  • 将DataGrid绑定到DataContext

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