none
【MVVM】如何正确使用 MVVM(Light) 开发?(详见正文) RRS feed

  • 问题

  • 引言

    搜索 “MVVM” 有一堆示例及教程,但发现很多都不对,最常见的是把 业务逻辑 放在 ViewModel 层,这是明显错误的,根据 维基百科 上解释,VM 应该负责把 M 层的数据处理成以 V 层能直接使用的数据。业务逻辑 应该放在 M 层。

    所以,我已经不敢在网上乱看了,一些人也只是为自己的博客加点料,MVVM 的 VM 被其简单的搞成 M 的一个封装,写篇 “MVVM xxx 教程” 误导大家。

    我现在是晕头晕脑的。

    具体的,比如我想做个 “新闻阅读” 应用程序:新闻数据的来源由相关网站的开放 API 提供,所以我可以很轻松的获取新闻的 Json 数据。

    程序是很简单,但如何使用 MVVM(Light) 模式(框架)开发呢?

    我看过 MVVM - 在 Windows 8 中使用 MVVM 模式 这篇文章(由于是机器翻译的,所以看的也迷迷糊糊的),和 “新闻阅读” 应用程序很类似,通过 Web 获取数据,然后显示出来,使用的是 MVVM Light 框架。这里我有一些疑问:

    1. 到底是 Model 实现 INotifyPropertyChanged 接口还是 ViewModel 来实现?为什么我会有这个疑问?因为网上教程相互矛盾,我已经迷糊了=_=
    2. 上面的文章中似乎用 IDataService 接口这种方式获取数据,也就是说 Model 层里的 DataItem.cs 是只包含一堆属性的纯数据模型,无业务逻辑,而使用独立的 DataService.cs 类专门用于获取 Web 数据。对于这一条,我说的对吗?
    2015年9月3日 6:07

答案

  • 你好,

    首先,我觉得MVVM light是一个轻量级的mvvm框架,它的出现方便我们用MVVM的模式去写程序,但是不代表你开发所有的程序都需要用到MVVM light,有些时候用code-behind方式去实现,明显比用MVVM 实现来的简单方便,那就没有必要用MVVM.

    其次,要理解MVVM,你首先要对WPF中的绑定、命令等基础内容需要有一个完整的认识,因为MVVM这种模式是和绑定配合使用的,如果你开发的程序还是使用传统的方式,而没有在XAML上使用Binding,那么我觉得你使用MVVM完全是没有意义的。

    >>"到底是 Model 实现 INotifyPropertyChanged 接口还是 ViewModel 来实现?"

    INotifyPropertyChanged接口,你需要知道,不管是Model实现这个接口,还是ViewModel实现接口,归根结底,它们实现这个接口是为了什么? 答案是:当你修改绑定的属性的值时,能够及时的通知UI。所以,我觉得很好理解,无论你的业务逻辑写在哪里,需要实现INotifyPropertyChanged接口的是与XAML绑定属性的那个类或者是与XAML绑定的集合所在的那个类。

    >>" IDataService 接口这种方式获取数据,也就是说 Model  层里的 DataItem.cs 是只包含一堆属性的纯数据模型,无业务逻辑,而使用独立的 DataService.cs 类专门用于获取 Web 数据。"

    可以这么理解,单独的将业务逻辑封装成一个类,完全符合面向对象的思想,方便代码重用,这点完全没有问题。

    另外,我觉得你之所有会有这样的迷惑,是你还没有完全理解WPF中使用绑定的好处,另外要想使用MVVM light,对于命令的理解也是必不可少的,我想学习mvvm light的最好途径,还是试着看一些英文的文档,因为国内的中文文章有些写的不完整,对初学者学起来有一定难度,多看一些人家用MVVM写的例子,看得多了,你会发现很多好的例子都不是完全遵循MVVM所描述的那种方式来写,有很多只是用了MVVM light中的一部分功能,比如说Messenger类,Command类中的一些已经封装好的方法等。

    这里给你提供一些我学MVVM light时看过的一些资料,全部是英文资料,需要你慢慢消化:

    http://www.galasoft.ch/mvvm/

    MVVMLight-Using-Two-Views

    Using MVVM Light in WPF for Model-View-ViewModel implementation

    Best Regards,

    Xavier Eoro


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2015年9月4日 6:57
    版主