浅析Ajax中常用的设计模式
2009-04-23赵伍军
赵伍军
[摘要]Ajax是近几年web应用方面的热点技术,其应用越来越广泛。一般来说传统的web应用中几乎没有使用设计模式,但在Ajax的开发中却涉及到了部分设计模式,就此内容做一个简要的介绍和分析。
[关键词]Ajax 设计模式 Adapter Facade
中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0320032-01
一、Ajax中使用设计模式的原因
尽管Ajax是现在Web技术发展的热点之一,但仍然属于Web应用的范围,而我们知道通常传统的Web应用中几乎没有使用设计模式,那么为何要在Ajax开发中应用设计模式?主要有依稀几点原因:1.Ajax应用中的JavaScript代码越来越复杂,代码库的规模越来越大,需要一种有效组织代码库的手段;2.Javascript编程与其他服务器端编程语言(例如Java语言,C#语言等)相比过于灵活,更需要通过引入设计模式加以控制,使得代码更加的健壮;3.Javascript支持面向对象的开发,为应用设计模式提供了必要的基础;4.设计模式是面向对象开发的精华,应用设计模式可以实现良好的重用和灵活的架构。
二、Adapter和Facade模式
在开发Web应用时,我们都要面对一个问题:如何保证Web应用程序在不同的浏览器上都能正确的显示。Web技术林立,大部分浏览器厂商的实现都或多或少地与这些标准存在差异。有的Web技术标准本身就很含糊,容易引起不同的解释;有的浏览器厂商处于易用的目的,各自通过自己的方式来扩展这些标准。这就造成了不同的浏览器之间的差异。
基于目前Web开发的特点,特别是客户端Javascript脚本的开发,需要面对很多变化和跨平台的挑战,所以,如果应用Adapter和Facade模式,将会非常有益于提高我们软件的可维护性,以及降低总体开发成本。
(一)Adapter模式。Adapter模式是解决接口不一致的问题。在实际的应用程序中,有时候客户端(这里指调用方)想要调用接口与实际上服务器端(这里指被调用方)所提供的接口不一致。出现这种情况,我们可能会有两种选择,一种是修改调用方或者被调用方的接口,使之相互适应。另一种就是在调用方和被调用方之间加入一个适配器(Adapter),让其隐藏两者之间的差异。
在Ajax应用中经常用到的XMLHttpRequest对象,就是需要Adapter模式的一个很好的实例。XMLHttpRequest对象是非W3C(World Wide Web Consortium,万维网联盟)标准,所以,尽管现有的较新的浏览器都支持该对象,但其具体实现是不一致的。在微软的IE浏览器里,XMLHttpRequest是以ActiveXObject的样式实现的。而在Mozilla浏览器里,其又以一种build-in对象的形式实现。
对于我们常用的应用程序来说,我们并不关心这些实现细节,而是如何能够获得一个可以供使用的XMLHttpRequest对象。获得一个可用XMLHttpRequest对象的代码如下所示:
Function createXMLHttpRequest()
{
var CXMLHttpRequest = false;
if (window. XMLHttpRequest)
{
//创建非IE浏览器中XMLHttpRequest对象
CXMLHttpRequest = new XMLHttpRequest();
}
else if(window.SctiveXObject)
{
//创建IE浏览器中的XMLHttpRequest对象
try
{
CXMLHttpRequest = new ActiveXObject (”Msxml2.XMLHTTP”);
}
catch(e1)
{
try
{
CXMLHttpRequest = new ActiveXObject (”Microsoft.XMLHTTP”);
}
catch(e2)
{
//不能创建XMLHttpRequest对象
alert('不能创建异步请求对象!');
}
}
}
return CXMLHttpRequest;
}
该文件中的try……catch语句帮助我们实现了跨平台性,createXMLH
TtpRequest()函数封装了与特定浏览器相关的创建XMLHttpRequest对象的方法,该函数便是一个Adapter。这段代码实现了一个创建XMLHttpRequest
对象的统一接口,并通过委托(delegate)的机制,自动帮助我们用各种方法在不同的平台下实例化一个XMLHttpRequest对象。
(二)Facade模式。Facade实际上是理顺系统间关系,降低系统耦合度的一个常用的办法。有时候,我们的客户端(调用方)所调用的子系统过于复杂。通常,调用方需要连续调用被调用方的多个服务才能完成某种特定的任务。每次调用方重复调用操作都非常麻烦,并且容易出错,所以,我们需要提炼出一些经常用到的操作,组合成一个接口。这样,每次调用方需要该服务时,仅需要调用该Facade接口,便可以轻松执行某项特定任务。在Ajax中,当需要用XMLHttpRequest;对象向服务器请求数据的时候,仅仅为了请求一次数据就需要五个步骤:1.建立XMLHttpRequest;对象;2.指定响应处理函数函数;3.用open方法设置请求方式,URL地址和请求模式;4.用send发送请求;5.监视请求状态,并对相应的状态进行响应处理。
三、总结
本文针对设计模式在Ajax中的应用,选取了Adapter和Facade两种比较典型设计模式,对其进行了简要的分析和介绍。在Ajax中还用到了其他一些设计模式,比如Observer模式、Command模式和Singleton模式,限于篇幅有限,在此不再作一一介绍。如有兴趣,可以查询相关资料。
参考文献:
[1]祝红涛、刘海松、郝军启,Ajax从入门到精通,北京:电子工业出版社,2008.
[2]谭日森,Ajax技术的特点及发展前景,信息科学,2007年21期.
[3]刘娜、郑楠楠,认识Ajax与Ajax的应用,电脑开发与应用,2008年4期.