在当前模型驱动设计DDD和share nothing架构驱动下,以及基于分布式CAP定律和BASE理论的普及,Web本质上作为一个分布式系统的认识越来越受到很多人注意,因此,基于浏览器的RIA应用越来越普及,如google的GWT等等。
将这么多概念揉合在一起,可能你有点茫然,他们之间有关系吗?浏览器作为富客户端,越来越有必要做更多的事情,包括和Client操作有关的一切,例如Session等,这样,减轻服务器端负担,使服务器端不必被客户端Session绑架(Stick to session),从而实现更好的可伸缩性Scalable。
为了实现这点,曾经天经地义在服务器端实现的MVC模式也被搬到RIA浏览器中,当然主要是VC两个部分,和服务器端交互的就是Model,而服务器端摆脱了客户端Session约束,专注对Domain Model实现伸缩性,这种分布式的分工俨然是合适的,如果再结合BASE理论,如果我们需要高一致性,就将数据作为Model的字段,否则,由RIA浏览器通过AJAX再次实现读取,或者通过Web Sockets由服务器端推到客户端。
所以,Web架构两个趋势:胖客户端RIA + 胖领域模型(也就是服务器端的充血模型)。
在浏览器客户端实现MVC好像只有Swing或VB专有语言才能实现,实际上现在基于Javascript的MVC框架非常多,这里介绍一个基于JQuery的MVC框架coreMVC,使用起来比较简单易行。
corMVC: An jQuery-based MVC Framework一文介绍了coreMVC如何使用?
下面是coreMVC架构:

以contact应用为例,实现步骤:
1.建立一个“contact” model,取名为 “contact.js”
2.建立controller MVC中的控制器,在这个控制器中实现contact模型的增删改查CRUD流程划转。addContact, editContact, deleteContact等方法分别是新增 编辑和删除,与服务器的RESTful接口交互,如下代码:
function Controller(){
// Route URL events to the controller's event handlers.
this.route( "/", this.index );
this.route( "/contacts/", this.index );
///contacts/add/很REST
this.route( "/contacts/add/", this.addContact );
this.route( "/contacts/edit/:id", this.editContact );
this.route( "/contacts/delete/:id", this.deleteContact );
.....
};
<p class="indent">
|
更多Controller代码可见原文。
3.建立MVC的视图,比如 “Contact List“(Contact列表), “Contact Form”(单个Contact表单) , 个人感觉coreMVC实现View比较复杂了些,View视图实际直接使用html实现即可,js只是将Model数据填入到html的表单form或相应的html字段中即可。
更多服务器体验搬迁到客户端,可见这个视频,当然只是展示一个新的idea。
[该贴被banq于2009-12-23 13:15修改过]