这样看来,JavaScript兼具面向对象,结构化,非结构化三种编程方式的特点,但却弄得不伦不类,没有一个清晰而统一的编程模型,难于写出结构清晰易于维护的代码,反而带来了许多混乱。
其次,JavaScript的另一硬伤是它的浏览器运行环境。
由于历史的原因,不同的浏览器,甚至同一浏览器的不同版本,其编程模型都有或多或少的差别,因而不得不写代码检测浏览器类型,比如需要为IE写一套代码,又为FireFox写另一套。这实在是一件麻烦事。
上述这些问题,几乎是B/S架构系统“与生俱来”的“缺陷”。先天不足后天补,人们想出了许多招数来解决这些问题。AJAX是众人看好的希望之星。
2、希望之星——AJAX
这些天来,我系统地了解了一下微软的AJAX框架。发现这一框架的复杂远远超过我原先的估计,微软设计AJAX框架的工程师们,将各项Web开发技术的潜力发掘得很深,在很大程度上弥补了前面提出的问题。
(1)对JavaScript语言的扩充:
微软通过提供封装好的AJAX Library,增强了JavaScript的面向对象特性,可以方便实现继承,定义接口,序列化对象,引发事件,反射类型等功能,虽然比真正的面向对象语言(比如Java/C#)还有差距,但能将“丑陋”的JavaScript打扮得可以见人,也算是功力不凡。
(2)大幅度提升浏览器端代码的功能
在AJAX Library支持之下,配合增强功能的JavaScript,在浏览器本身的支持之下,可以在浏览器中写JavaScript脚本,方便地向服务器发出异步请求,实现页面局部刷新,并可以直接调用Web Service。
(3)引入基于组件的开发(CBD)方式
基于组件的开发(CBD)早已是面向对象系统的主流开发方式,虽然现在SOA(基于服务的架构)炒作得热闹非凡,但要达到CBD那样的成熟程度,还需要时间。
对于JavaScript而言,别说SOA,能实现CBD都很困难。
为了实现CBD,微软给JavaScript“大补特补”,增强了许多特性,基于Microsoft AJAX Library,程序员可以开发三种类型的可复用组件:None_Visual Component(不可视的组件,相当于面向对象系统中的一些提供公用功能的类)、Behavior(行为,扩充现有Web控件的功能)、Control(拥有可视化界面元素的Web控件)。
尤其是AJAX Control ToolKit中提供的几十个控件,基本上实现了B/S对C/S用户界面大部分特性的摸拟,是这一新编程模型应用的典范。
微软对JavaScript编程模型的增强,使软件工程师终于可以用CBD的开发方式开发Web客户端代码。我认为,这是一个进步。
(4)增强的服务器端能力
为了增强浏览器端代码的能力,必须通过服务器端予以配合。AJAX本身就基于Browser与Web Server相互支持的编程模型(Web Server提供数据服务,Browser提供XMLHttpRequest对象可向Web Server发出异步请求,当数据回来时,程序员可以用JavaScript编写代码实现对网页的动态局部更新)。
通过AJAX Extension,微软增强了服务器端ASP.NET框架的功能。并将常用的功能外化为简单的Web控件,比如AJAX的核心控件ScriptManager,用于定义页面可更新区域的UpdatePanel,还有用于增强现有ASP.NET控件的位于AJAX Control Toolkit中的几十个Extender控件(即附加到现有控件上的控件,其目的是给现有控件扩充新的功能)。
拥有了这些控件,开发Web前端程序就类似于在VB中设计窗体了。现在不仅仅是可以绘出类似于Windows窗体的界面,而且通过利用AJAX的异步请求与页面的局部刷新技术,在Web服务器的配合之下,可以在用户体验上逼进Windows窗体。
不管多少人如何看不起VB,但VB所带来的可视化编程普及浪潮,的确影响深远,微软推动JavaScript编程走向这一步,也是大势所趋。为了提高Web 开发的效率,必须走这一步。
然而,需要指出的是,不管后天如何“进补”,毕竟“先天不足”,B/S架构要在用户体验这点上超过C/S,还是非常困难。