SilverLight技术的出现也已经有很长一段时间了,但是却感觉还没有比较统一的框架模式(个人的技术水平有限)。

在研究它的架构模式过程中,刚开始是试想采用MVC模式来搭建系统架构,利用SilverLight与WebForm相结合的形式,但是框架做好了之后感觉不太好使,WebForm与SilverLight间的页面展现总是感觉不能跟其相应的页面逻辑代码实现分离;相反,Controller对于View的控制还增加了相应的工作量,所以放弃采用MVC模式。

后来尝试采用MVP模式,虽然能够实现页面的逻辑分离,但是Presenter却感觉显的比较臃肿,需要处理的关系较多,压力较大,所以只能继续寻找合适的框架模式。

终于找到了一种相对合适的框架模式:MVVM,即Model-View-ViewModel。这种模式跟MVP模式相似,只是对它进行了相应改进。View这里跟MVP中的View是一样的,负责页面展现;ViewModel是对应于View的页面模型,包含与View想对应的属性与行为;Model可以分为业务模型与实体模型。通过这种方式,我们可以实现页面与逻辑的分析,只有我们的Viewmodel不变,那么View既可以用WPF,也可以用SilverLight等来展现。如下图:

 

随着.net 4.0的推出及SilverLight技术与WCF的不断完善,也使我们可以更灵活的搭建相应框架。如上图,在Service Layer,我采用了Domain Service来处理Client与Service间的通信,Domain service也是一种WCF通信方式,只不过是对它进行了封装,使我们不用去关心具体的通信问题;Domain Model采用了Ado.net Entity Data来处理数据连接。下面是我做的一个框架模型:

这里分为Client与Server两部分:Client主要是负责页面展现及相应的页面模型;Server则负责业务逻辑处理

1.Client

Mvvm.Client:View,这里是我们要实现的UI展现,可以用SilverLight、WPF等;

Mvvm.Client.ViewModel: ViewModel,包含与View相对应的属性与行为;

2.Server

Mvvm.Server.Data: Entity Model,实体模型,我们可以添加一个Ado.net Entity Data Model来实现与数据库的通信;

Mvvm.Server.DataService: Data Service,数据服务,通过它进行相对应的数据操作;

Mvvm.Server.RiaService: Ria Service, 业务服务,通过它调用DataService的数据服务来操作Entity Model,并且实现与Client端ViewModel的通信;我们可以添加一个Domain Service来实现。同时,还有一个DtoModels文件夹,这里放置的是与View属性相对应的模型。Ria Service通过Data Service来操作Entity model,此时返回的是与数据库相对应的实体模型,所以需要转换为与View相对应的模型,我们将这些类放在DtoModels文件夹下,相互间的转换可以采用AutoMapper或Linq来实现。

Mvvm.Server.Web: web应用程序。

这就是我对于MVVM这种模式的理解,希望有兴趣的朋友一起探讨、学习。

 

参考资料:

http://forum.cornerstone.se/blogs/cornerstones_utvecklarblogg/archive/2009/11/30/silverlight-4-mvvm-with-commanding-and-wcf-ria-services.aspx

posted on 2010-03-13 00:17  yo  阅读(2542)  评论(8编辑  收藏  举报