`

基于客户端的MVC架构

阅读更多
在当前模型驱动设计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 );
                .....

};


更多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修改过]
itian



发表文章: 3
注册时间: 2008年10月05日 15:12
悄悄话
个人博客
我要关注该作者发言

基于客户端的MVC架构 2009年12月24日 11:32 收藏关注本主题 到本帖网址 加入本帖到收藏夹 引用该主题回复 回复该主题
1
顶一下
我现在也特迷信 胖客户端 之前的项目都是用 css + js 实现的客户端,整体作下来对 html, css, js 的胖客户端挺失望,(没实际开始做,只是猜想)相比插件式(Flash, Applet)的 胖客户端 来说, 前者要解决的问题又多又麻烦,光是一个页面的浏览器兼容就搞死一帮人,然后有些系统需要服务器主动往客户端发信息,js没辙,最后用了tomcat comet的实现才完成这个系统,最近也看到banq发的WebSocket信息,好像给js带来了一些希望,但我却是觉得绝望,浏览器之间的统一,到什么时候各大浏览器才能全都支持,而现在插件式的胖客户端N年前已经能用Socket了,前段时间也看到篇文章说WebGL,我也是差不多的想法,js写 opengl,而且现在还是在构想阶段,插件式的胖客户端的现在已经可用了,Flash10开始支持opengl, java这块我所知道的就有2个opengl的实现,而且才好几年前就已经有基于Java3D浏览器上的Applet的Web3DGame了。
[该贴被itian于2009-12-24 11:34修改过]
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics