MVVM模式应用体会

    进公司实习工作后,本人接触的第一个技术名语就是MVVM模式,从学习到运用,已经有大半年时间,这篇文章将简单谈谈个人在产品开发过程中使用MVVM模式的体会。

    传统的WinForm和ASP.NET应用程序是基于事件驱动开发的,以ASP.NET为例,在实际开发中,*.aspx页面用于渲染HTML,*.aspx.cs页面用于实现服务端逻辑,在开发初期,这种方式显得方便快捷,但是这种高耦合性导致了后期维护的复杂性,一旦aspx变化,aspx.cs的代码同时需要改变,比如将aspx中的GridView控件以FormView控件进行替换,对应的aspx.cs文件中不得不进行大量修改。而MVVM模式在WPF/SL应用程序中得以广泛应用的原因是,WPF/Siverlight应用程序是基于数据驱动的开发的,网上曾有研究者在WinForm下实现MVVM模式与WPF进行对比,得出结论:WinForm项目中大规模运用MVVM模式开发效率很低。

clip_image002

     在WPF/Silverlight中应用MVVM模式,View主要用于界面呈现,ViewModel用于逻辑实现,Model用于数据的构造,而这三者能够进行通信,最重要的是通过WPF/Silverlight中强大的数据绑定机制,将View和ViewModel有效的联系起来。

     尽管在MVVM模式的名称没有体现Command,但是在实际情形中,Command是实现MVVM至关重要的一环,目前项目主要采用了Prism框架中的DelegateCommand<T>类

     在Silverlight项目中采用MVVM模式,优势是显而易见的:

       1,对于视图-逻辑的分离便于后期对原有功能扩展和维护,当UI变化时,ViewModel中的逻辑不需要进行变化

       2,可以仅仅通过Blend实现简单的功能,而不需要写任何代码。

     在实现过程中,不要只是为了实现MVVM而MVVM,而应该根据实际情况进行取舍,事实上,由于Silverlight只是WPF的一个子集,其对MVVM模式在某些方面的支持仍有所欠缺:

      1,对枚举类型绑定比较困难,如将枚举类型绑定至RadioButton

      2,Silverlight4中仅仅对继承ButtonBase的控件实现了Command属性,在实际的使用中,对于其它的事件可以使用Blend4中中的InvokeCommandAction

      3,无法在View和ViewModel传递复杂对象,可以破坏View或者ViewModel作为折衷办法,如ChildWindow和父容器的对象传递

   目前,个人对MVVM模式的主要研究方向:

     1, 如何传递EventArgs对象到ViewModel

     2, 熟练掌握Behavior,Trigger,Action概念以运用到MVVM中

     对于MVVM模式,需要在实际运用的过程中进行总结,只有这样才能真正体会采用MVVM模式在程序中的优势。

个人博客中关于MVVM模式的学习:

Silverlight中使用MVVM(1)--基础

Silverlight中使用MVVM(2)—提高

Silverlight中使用MVVM(3)—进阶

Silverlight中使用MVVM(4)—演练

Silverlight中使用MVVM(5)-Command II

Silverlight中使用MVVM(6):AutoComplteBox的异步过滤

posted @ 2011-04-08 14:03  Ringgo.Yao  阅读(11007)  评论(14编辑  收藏  举报