我正在尝试掌握不同的模式(MVP,MVVM等),并找到一个适合我的需求。读了这么多之后,我还是不太确定。希望有人能为我阐明这一点。
目前,我有一个WPF View,它实现了一个接口ICustomView。这个接口被注入到我的演示者中。然后,展示者负责订阅数据、管理订阅等。当数据返回给展示者时,它会针对模型(CustomBusinessObjects的IObservable集合)调用各种方法。它使用接口ICustomView完成此操作,因为IObservable是模型的属性。
我看到的问题是模型和视图的耦合太多了。此外,演示者还决定对模型调用哪些方法。目前,视图由一个WinForms网格组成,这是由ICustomView公开的,允许展示者对视图调用方法。但是,它增加了Presenter和View的耦合,这使得很难将此WinForms网格替换为WPF网格或图表等
我正在考虑让模型成为一个完全独立的实体,比如说使用一个方法ProcessUpdate(string topic,IMessage payload)的IModel。这将把逻辑从presenter移到Model中。这也意味着多个视图可以共享相同的模型。自定义模型可以具有用于特定定制的附加接口,但演示者只需了解IModel。
这听起来像是一个合理的想法吗?我是不是漏掉了什么?
任何建议都很感谢。
谢谢
发布于 2011-04-19 23:02:52
我建议您从MVP切换到MVVM,因为您使用的是WPF。如果你使用的是ASP.Net或WinForms,我只会使用MVP。
也就是说,您的MVVM对象将是:
模型:简单数据对象。它不应包含任何功能,如保存或编辑,但可以具有验证逻辑。
视图:你的UI。我通常作为ViewModel类类型的DataTemplate来执行我的操作。它应该绑定到你的ViewModel的属性和命令。
ViewModel:将两者结合在一起。视图中显示的任何数据都应绑定到ViewModel中的属性。视图中的任何命令(如按钮单击)也应指向ViewModel中的方法。
例如,当用户点击视图上的GetCustomer按钮时,ViewModel应该接收命令,获取CustomerModel,并公开它的属性以便绑定到视图。当用户点击保存时,ViewModel应该验证模型是否有效,然后使用它的CustomerModel属性执行保存代码。
发布于 2011-04-19 22:15:29
就我个人而言,在使用WPF时,我更喜欢使用WPF数据网格,并将其绑定到MVVM模式中的数据上下文。我认为你首先需要摆脱的是WinForms网格(只要你使用的是WinForms网格,就几乎不可能解耦你的模型/视图。
我会做一些不同的研究。
WPF DataGrid
的MVVM模式
一旦你达到了这一点,你需要做的就是更新你的数据上下文,你的视图也会随之更新。
https://stackoverflow.com/questions/5717641
复制相似问题