【程序思考】RIA 编程:将 View 从 MVC 框架中移走

来源:互联网 发布:什么是网络事件营销 编辑:程序博客网 时间:2024/04/25 18:53
 

凡是采用过某种 web 框架开发网站的人大都知道 MVC 模式。我本人最先接触这个词是2002年,那时我刚刚开始学习 java 编程,当时公司采用 apache velocity 来开发产品 ,这是一个java 的模板引擎,至今仍被广泛应用。 velocity 有自己的模板语言和 Controller,对于 MVC 框架来说,它只实现了 View Controller,而没有 Model。 后来接触了其他几种 java web 框架后,我才发现它们大多数都没有涉及  Model , 以 Struts 为例,早先写的代码中,都是将本应该属于 Model 的逻辑写在 Action 中,后来这种做法被越来越多的人诟病,因此很多Java 框架都推荐才用 EJB 作为 Model ,而尽量在 action 中少写业务逻辑。 随着 EJB 2.1 的问题越来越多,很多轻量级的解决方案出来了,这就是用 Service 包装 Hibernate ibatis ORM 框架以代替重量级的 EJB ,这种做法的侵入性更小。 总的来说,很多java  web 框架都非常类似,它们都遵循 MVC 模式, 因为大多都不涉及 Model ,区别集中在对 View( 视图) 的实现上。不光java web 框架是如此, 其他语言的情况也是类似,Rails 是最近名声最大的一个web框架,它对 MVC 模式的实现最彻底,连目录名都叫做 models, views, controllers , 随之而来的 ror ”框架大多遵循 rails 的方式和理念,php ror ” 框架最多,有新意的没几个,python django 框架比较特殊,它并非模仿 rails ,所以不能将它称为  ror ” 框架, 而且它的 MTV 模式是 MVC 的一个变种,是按照web 开发的三层(展示层,应用层,数据层)来映射的,比较有意思。其实 web  框架虽多,但是大多是按照 MVC 来开发的, 只是每个开发框架的人对 MVC 的理解和实现有所差别. 这点很类似程序语言对 OOP  的理解一样。 早期 web 开发框架采用 MVC  有它的原因,因为带宽的问题,浏览器能力有限,瘦客户端应用是一个流行趋势。如今随着富媒体应用的流行, 带宽越来越不成为问题,在RIA 开发中,MVC  模式应该重新被思考。以往这些  web  框架中最难以学习的部分应该是 view 层,每个 web 框架都有自己特殊的 view 用法,尤其是 java web 框架,你要么学习一种 tag lib,要么学习一种模板语言,tapestry 的组件方式对美工是最友好的,但是学习曲线太陡。对于服务端后台开发来说,views 不是必须的,组织前台页面显示应该是美工和客户端程序员的事情. 把这些 view 层的工作都放到服务端框架中是不妥的,不仅增加了程序员的负担,也增加了服务器的负担。

 

随着 Ajax 的流行,浏览器能做更多的交互操作,越来越多界面层的操作不需要在经过服务器的渲染生成,这样 View 在服务端框架中的作用也就越来越少了。RIA 的开发中,服务端要做的只是提供某种服务,这种服务可以是 web service, rpc, 或者 rest 类的操作,和富客户端之间交流的只是 Message , 而这种 Message 可以采用 xml(webservice), json 等格式,Google web toolkit 是一个很好的例子。如此一来,服务器的负担就小了很多,而整个 web 开发的模式都将有所改变。 Web 开发不再分为开发人员和美工,而分为 服务端开发人员和客户端开发人员,美工。 服务端开发人员专注于提供某种服务,不再涉及 view ,最多也就是提供某种 Message 形式的 View,比如 rails 中采用 build style 来提供 xml 的生成。 而客户端的开发,以 flash 为例,flash 程序员开发组件给 Flash 美工,Flash 美工利用组件,设置属性,构造页面。