这个理由太多了,我仅从系统结构模型分析下,以2000年为分水岭吧,2K年后火起的是B/s结构,相比较与c/s结构的优劣,列表如下:
B/S | C/S | ||
缺点 | 优点 | 优点 | 缺点 |
客户端要安装 | 用户界面人性化 | 免安装、免维护 | 界面观感差(点一下刷一下) |
不便统一升级 | 升级扩展方便 | ||
安全性差(程序在客户机上) | 便于进行统一权限管理 | ||
代码相对藕合性强;开发效率低 | MVC的模式简洁;便于分工开发 | ||
. . . | . . . |
AJAX技术的兴起,我认为从用户的角度看,就是要在浏览器上跑出本机应用的效果,即AJAX兼备了传统B/S和C/S的优点。
开发者在使用ajax技术时,大多的痛处是:漂亮的界面怎么搞定;大多数的专业java工程师开发的界面都是恐怖的; 是在引入了ajax技术后,页面表示己不像mvc中那样清晰;与美工良好的配合需要程序员对css,html,javaScript技术更深入的掌握---而不仅仅是看懂为止,因此,更多时间,我们会在应用中使用像dwr,ZK这样成熟的ajax框架。以俺之见,ajax框架可以分为如下四类型:
第一种是基与传输的解决方案,如前面所说到的dwr,当然还有大名鼎鼎的json;这种解决方案通过其框架的转换,使得页面的js可以透明调用服务器端语言方法并自动转换其间交换的数据类型;但在页面的表现手段较差,如果你要展示一个漂亮互动的tree或grid,这样样的框架并没有提供支持。
第二种可以理解为java语言到js的翻译器:即服务器端以编写事件调用机制通讯的java代码,通过其框架导出成前台的js脚本调用;对于开发者而言,只需要编写后端java代码即可;这种类型框架的噱头就是:“不写一行js代码也能应用ajax技术!”。典型的代码如GWT、ZK等。
第三种则是以独立与服务器端语言的js脚本库形式发布,如yui、ext、jQuery等;这种基本上是一个独立的js类库,带有众多的工具函组、tree、form、grid等现成的组件,且有统一的设计风格;所以它的优势就是页面组件非常完善;当然,学习起来需要对js语法相当熟悉。以js脚本库为应用形式的,在开发时学习成本较高;
这里我推荐TIBCO General Interface(www.tibco.com/devnet/gi/ ),TIBCO是通过开源BSD授权发布的Ajax RIA库。在这个RIA库中包含了100多个Ajax组件,并且还提供相应的可视化开发工具(TIBCO Business Studio)。这个工具是我见到开发AJAX应用最牛X的IDE了---就像开发SWING界面一样拖放!下图为tibco gi的界面:
对于大型的AJAX项目开发,建议使用TIBCO的IDE快速开发应用界面,后台的javaObject到前台来就通过dwr(dwr3己有内置的gi调用接口) ,我现在手头的一个项目就是hibernate+dwr+TiBCO,黄金搭档!呵呵。
第四种则是全栈式设计的RIA开发,可选的技术(平台)有javaFX、Flex、及Silverlight等。这种方式可以实现功能最为强大的RIA开发----可以理解为它将传统的本机应用开搬到了web上。但其对网络带宽要求较高,且需要客户端浏览器插件支持。我本人比较看好Flex。(http://www.riachina.com/上有相关较多的讨论)。
与前面三种有本质区别的是,前面三种都是基于http协议的,本质上是用XHR将http的请求/响应模式包装为异步,不存在面向连结的通信!也就不可能出现真正的"服务器推"技术;但在Flex中,是可以在客户端自己创建到服务器的Socket的,其它二种,我还不清楚,呵呵。
目前Ajax的框架、工具可谓是成群结队的涌现出来;在具体开发时,经常会面临选择的难题;做一个合适的选择,要考虑到项目的应用方向,如是互联网门户还是企业内部?项目的安全性是否特别重要?选择某种框架(工具)时也必须考虑到团队的学习成本。总而言之---不要陷在这些工具的泥潭中,今天试这个,明天玩哪个。
有一点是不变的:目前的AJAX应本,其根本是基于javaScript和css编程,这两种东东对与AJAX应用而言,其重要性就相当与JDK核心API在开发javaEE应用时的重要性一样----这是本质、这才是核心!但这两者却经常是java程序员所不擅长的;对于应用市场而言,应该出现专业的ajax工程师,因为ajax毕竟是独立与服务器的一种技术。
4.AJAX对web开发模式带来的改变:
1.客户观感重与技术方式,不要做技术的学究!
AJAX本身是一种新瓶子装老酒的技术;在软件开发者大淡OOP、MVC、ORM等等技术名词时,可能是乎略了一个简单但是本质的问题:软件就是要客户用得方便!一直被oop程序员轻视的的javaScript和css现在担挡了这一重任,并提醒我们:不要跟我讲技术学究名词!我要的是好用,用的方便!---这才是客户要的,这也是AJAX技术能如此讯猛发展的原动力。
2.多页面的MVC模型转向桌面式的单页面:
在经典的MVC模开发模型下,典型的过程是点击页面上的一个组件,请求后台Action(业务动作),返回刷新页面。而在ajax模型下,浏览器里装载的可能一直是一个页面,页面上组件事件的触发将直接调用后台对应的业务动作更新另外一个组件---似乎又回归到了过时的c/s结构模型。这里看不到控制器;MVC中视图的粒度从页面缩小到html组件;通过请求/响应模型的Action调用在这里变成了基与事件机制的响应,就像是将deskTop放到了浏览器中一样。
3.ajax中间层增加了web开发的分工:
传统的web开发,页面一般只交给web设计师(主要负责页面布局和美工)完成;程序员会躲在后台,写一些谁也看不到的代码控制页面上动态数据的展示;AJAX在这中间增加了新的一层,这也是很多程序员从严谨的OOP高级语言编程转向灵活多变的脚本语言(javaScript)甚止是文本化的标记语言所感到不适的地方;另外,我们常规的思路是从不要求程序员做出漂亮的web界面---他们也做不出!但这一层的新出现,带来了新的分工,即专业的AJAX程序员。
专业的AJAX程序员不但要对html、css、javaScript有非常熟练的掌握;重要的是要求具备人性化界面设计的思考能力,考虑到一个简单的autoSuggest就引出web开发如此大的变革,你就知道这点有多么重要!因为你直接面对的是客户的眼睛,你不是躲在服务器后面的程序员!因此有理由认为你做的是最重要的事。
4.web安全性要求的加强:
这是无可避免的,相对于呆板的MVC,ajax的灵活意味着安全的削弱;大量的ajax层js脚本会暴露在客户端,如果这其中可能包含了你的安全验证和一些需要保密的业务逻辑,这会被攻击者轻而易举的搞掂,看看我们前面dwr的例子就知。 除了这要求后台开发者和ajax程序员更加紧密的合作和细心之外;最好是在后立设立独立的安全机制控制,验证所有的敏感数据操作。