(计算机软件与理论专业论文)基于ajax的金融柜员系统设计与实现.pdf_第1页
(计算机软件与理论专业论文)基于ajax的金融柜员系统设计与实现.pdf_第2页
(计算机软件与理论专业论文)基于ajax的金融柜员系统设计与实现.pdf_第3页
(计算机软件与理论专业论文)基于ajax的金融柜员系统设计与实现.pdf_第4页
(计算机软件与理论专业论文)基于ajax的金融柜员系统设计与实现.pdf_第5页
已阅读5页,还剩47页未读 继续免费阅读

(计算机软件与理论专业论文)基于ajax的金融柜员系统设计与实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中国科学技术大学硕士学位论文 摘要 a j a x 技术是目前最热门的技术,它利用j a v a s c r i p t 和d o m 异步地在浏览 器和服务器间进行交互。 随着商业银行竞争的渐趋激烈,新交易不断出现,各商业银行原有的柜员系 统已经不能满足其要求。同时基于c s 体系结构的柜员系统维护更新非常困难, 所以需要迁移到b s 体系结构,这也促使了基于j 2 e e 的柜员系统的产生。 本文设计的金融柜员系统,采用a j a x 技术作为其运行平台的核心,用户可 以通过一个a j a x 引擎在浏览器和服务器之间进行交互,提高了用户体验;并且 利用a j a x 技术构建了大量的金融组件。同时,基于e c l i p s e 体系结构构建了其 开发平台,并使用g e f ( g r a p h i c a le d i t i n gf r a m e w o r k ) 技术创建了可视化的交 易界面开发工具。本文对以上部分进行了详细的阐述,提出了很有价值的实现方 案。 关键词 金融柜员系统,a j a x ,e c l i p s e ,图形编辑框架 中国科学技术大学硕士学位论文 a b s t r a c t a j a xi sm o s tp o p u l a rt e c h n o l o g yr e c e n t l y , i tu s e sa s y n c h r o n o u sj a v a s c r i p ta n d d o mt oc o m m u n i c a t eb e t w e e nb r o w s e ra n ds e r v e r t h ec o m p e t i t i o na m o n ga l lc o m m e r c i a lb a n k sb e c o m e sm o r ea n dm o r es e v e r e , a n dn e wb u s i n e s sa p p e a rc o n t i n u a l l y , s op r e v i o u st e l l e rs y s t e m sh a v e n tb ea b l et o m e e tt h en e e d a n dm a i n t a i n i n ga n du p d a t i n gt h et e l l e r s y s t e mb a s e do n c s a r c h i t e c t u r ei sv e r yd i f f i c u l t ,s ow en e e dt ot r a n s f e rt ob sa r c h i t e c t u r e ,a n dt e l l e r s y s t e mb a s e do nj 2 e ea p p e a r s i nt h i st h e s i s ,an e wf i n a n c i a lt e l l e rs y s t e mu s i n ga j a xa si t sr u n t i m ec o r ei s p r e s e n t e d u s e r sc a nc o m m u n i c a t eb e t w e e nt h eb r o w s e ra n ds e r v e rt h r o u g ha j a x e n g i n e ,a n di ti m p r o v e su s e r 。se x p e r i e n c e al o to ff i n a n c i a lc o m p o n e n t su s i n g a j a xi sc r e a t e dt o o i nt h em e a n t i m e ,w e b t e l l e ri d eb a s e do ne c l i p s ea r c h i t e c t u r ei s c r e a t e d a n dw ec r e a t eat o o lt od e v e l o pb u s i n e s si n t e r f a c eu s i n gg e f t e c h n o l o g y i n t h i sp a p e r , w ed e s c r i b ea l lt h ep r o b l e m sa b o v e s o m eo r i g i n a la n dv a l u a b l ei d e a si n t h o s ef i e l d sa r ea d v a n c e di nt h i sp a p e r k e y w o r d s f i n a n c i a lt e l l e rs y s t e m ,a j a x ,e c l i p s e ,g e f 一1 1 中国科学技术大学硕= e 学位论文 1 绪论 1 1 研究背景 各商业银行的前台柜员系统业务多样,大多基于传统的客户端n 务器( c s ) 体系结构,在u n i x 终端上运行。当前商业银行竞争激烈,为了适应市场的需要, 新业务不断增加,c s 体系结构给系统更新和维护带来了极大的不便,提高了银 行的运营成本。因此,基于浏览器客户端体系结构( b s ) 的柜员系统便应运而生。 基于b s 体系结构的系统没有以上缺点,但浏览器的用户界面比较简单,难以满 足前台柜员复杂的业务需求,因而一直没有得到很好的推广。 柜员系统的交易一般都有上千个,如果完全采用手工编写代码的方式来实 现,需要花费大量的人力物力,给银行带来极大的开销。而且可维护性方面也不 能得到保证,这就需要提供一个可视化的开发工具。 本文探索将a j a x 技术应用于柜员系统的方法,研究可视化交易开发工具的 实现方案。 1 2 主要研究内容 以w e b 柜员系统为对象,研究运行平台和开发平台的实现。主要研究使用 a j a x 技术的w e b 柜员系统的运行平台设计和实现,以及基于e c l i p s e 体系结构 的金融交易开发平台设计和实现。 1 3 本文章节组织 本文在结构上分成四章: 第一章,阐述了论文的研究背景和主要内容,对论文结构做简要介绍。 第二章,介绍现有金融柜员系统及其不足之处,阐述了开发w e b t e l l e r 系统 的必要性,从总体上介绍了柜员系统体系结构j 中国科学技术大学硕士学位论文 第三章,设计并实现了柜员系统的运行平台,阐述了a j a x 和a o p 技术在运 行平台中的运用。 第四章,设计并实现了柜员系统的开发平台,阐述了e c l i p s e 平台体系结构, 以及g e f 技术在开发平台中的运用。 第五章,阐述了系统当前的运行情况。 第六章,总结评价本文柜员系统的优缺点,对下一步的工作提出展望。 中国科学技术大学硕士学位论文 2 现有的柜员系统及其不足 2 1 引言 当前商业银行竞争激烈,为适应这种需要,银行需要不断增加新业务,而目 前为止,国内外现有的柜员系统都有一定的缺陷。这一领域有很大的发展空间, 也有实际的开发价值。 当前国内大多数银行的柜员系统还使用字符界面,界面比较简单,且大多采 用客户端n 务器结构,随着新业务不断增加,这样在增加时也要同时更新各个 客户端的应用,带来了极大的不便。 为了设计更好的w e b 柜员系统,将分析国内的柜员系统。在本章随后的讨论 中,在国内的柜员系统中选取部分典型例子,总结分析它们的优点和缺点。在满 足柜员系统业务需求的基础上,继承优点克服缺点,给出w e b 柜员系统的设计方 案。 2 2 国内柜员系统现状 国内各商业银行所采用的柜员系统表现不一,但大多都基于客户端服务器 方式,并使用u n i x 终端来作为系统的载体。而随着各银行陆续进行数据大集中, 新业务的层出不穷,各银行渐渐产生了将柜员系统转移到浏览器服务器体系结 构上面的需求。但旧的柜员系统已不能满足这些需要,所以迫切要求开发新的柜 员系统。 目前国内港澳地区已有部分银行基于j 2 e e 技术构建了其柜员系统,如澳门 中国银行( 下简称“澳中银”) 。澳中银的柜员系统中存在近千个交易,而其开发 方完全采用了手工编写的方式为其生成了近千个交易的代码;代码数量非常庞大 冗余,几乎不存在任何的可重用性,而且一旦业务发生变化,就必须由银行的开 发人员或开发方来手工修改业务代码以满足需要,可维护性非常差。为了解决这 些问题,就迫切的要求提供一个可供银行方开发人员方便的开发交易的交易开发 平台,同时对柜员运行时系统进行模块化和组件化开发,从而提高开发效率和可 中国科学技术大学硕士学位论文 重用性,而这也是本文后面要讨论的内容。 当前国内大陆部分商业银行已经使用在使用交易开发平台来开发交易,目前 主要使用的柜员系统开发平台主要包括基于i b m0 s 2 操作系统的c t 2 以及南天的 o f p 。i b m0 s 2 操作系统以及c t 2 产品已经由i b m 宣布将不再提供支持,因此肯 定将退出历史舞台。 南天公司开发的o f p 则是相当不错的产品,它提供了大量已实现的金融应用 功能模块和功能部件,提供了专用于金融应用的f c l 语言以及专用的小型数据库 m i n i b a s e ,还提供了应用描述工具和应用开发管理环境。但是它的学习曲线比较 陡峭,而且只能运行在u n i x 系统之下。 2 3 我们的设计方案 在前面的几节里,通过对南天o f p 以及澳中银柜员系统的讨论,认识了柜员 系统所要满足的要求。并从用户的立场上,实际地分析了它们各自的优缺点。以 此为基础,我们扬其长避其短设计了w e b 柜员系统。 在系统中,划分为w e b 柜员系统运行平台和w e b 柜员系统开发平台两个部分。 运行平台构成了整个系统的底层库以及开发平台开发交易的基础,采用j 2 e e 技 术构建而成,它包含一些系统公共的底层模块如数据访问模块,主机交互模块, 共享设备访问模块等等;并使甩a j a x 技术作为服务器与客户端交互的核心技术, 及时地响应客户事件,提高了用户体验;同时还生成了大量的金融组件,形成了 w e b 柜员系统组件框架,提高了系统的可复用性,避免了重复劳动。而开发平台 则基于e c l i p s e 体系结构进行构建,采用e c l i p s er c p 技术,以插件的形式无缝 地集成到e c l i p s e 框架体系中,提供了可视化的交易开发工具,降低了学习曲线, 用户只需简单的培训即可使用;同时还提供了交易代码生成工具,当用户需要修 改交易时,如果需要修改界面部分,通过可视化的界面定制器就能完成,避免了 使开发人员直接面对代码,大大提高了开发效率。同时还提供了版本管理工具, 可以供多个用户同时并行开发。开发平台以x m l 文件为数据总线,将交易、交易 窗口、报文格式以及打印格式等无缝的组织在一起。下面是柜员系统的整体结构 图。 4 中国科学技术大学硕士学位论文 图2 1柜员系统整体结构图 5 中国科学技术大学硕:l 学位论文 3 柜员系统运行平台的设计与实现 3 1 运行平台概述 运行平台是柜员系统的运行支撑环境与调度中心,提供了w e b 柜员系统所有 的底层服务,包括数据库访问逻辑、报文处理逻辑、主机通讯逻辑等。整个运行 平台基于模型视图控制器( m o d e l 一v i e w c o n t r o l l e r ,m v c ) 模式,从功能层次上来 说分为模型层、视图层以及控制层三个层次。从应用角度看,运行平台可以分为 两个层次,一层是支持通用j 2 e e 系统的基础框架,另一层是针对柜员系统特定 功能的业务框架。 3 2 运行平台中的关键技术 3 2 1 j 2 e e 平台 j 2 e e 是由s u n 公司所提出的基于企业计算的平台规范,它提供了基于组件 的、以应用服务器为核心的多层应用体系结构,以及系统必需的可靠性、可扩展 性、可管理性和安全性。这种多层结构简化了开发、配置和维护企业应用的过程。 j 2 e e 平台由一整套服务、应用程序接口和协议构成,它对开发基于w e b 的 多层应用提供了功能支持,其中常用技术规范描述如下1 1 j : 1 1 j d b c ( j a v ad a t a b a s ec o n n e c t i v i t y ) :j d b c 由一组用j a v a 语言编写的类和 接口组成,为开发人员访问关系数据库提供了一个标准的a p i 。 2 ) j s p ( j a v as e r v e rp a g e s ) :j s p 页面由h t m l 代码和嵌入其中的j a v a 代码 组成。服务器端在客户端请求页面后,对这些j a v a 代码进行处理,然后 将生成的h t m l 页面返回给客户端浏览器。 3 、) s e r v l e t :s e r v l e t 是服务器端的应用程序,它扩展了w e b 服务器的功能。 4 ) e j b ( e n t e r p r i s ej a v a b e a n ) :e j b 是j a v a 服务器端框架的规范,它提供了 一个框架来开发和实施分布式商业逻辑,显著地简化了具有可伸缩性的、 高度复杂的企业级应用开发。 中国科学技术大学硕:i = 学位论文 3 2 2 a j a ) ( 技术 3 2 2 1 a j a x 概述 a a x 是2 0 0 5 年2 月由a d a p t i v ep a t h 的j e s s ej a m e sg a r r e t t 所提出的一个名 词,它是a s y n c h r o n o u sj a v a s c r i p t + x m l 的缩写。趟a x 并不是单一的技术,而 是几种技术的综合体,它由以下几个部分组成【3 】: 使用x h t m l 和c s s 的标准展现层; 使用d o m 来进行动态显示和交互; 使用x m l 和x s l t 来交换和操作数据; 使用x m l h t t p r e q u e s t 来与服务器进行异步通信; 使用j a v a s c r i p t 将以上技术绑定在一起。 在a j a x 出现之前,传统的w e b 应用中采用同步交互过程,用户的界面操 作触发h n t 请求,服务器在接收到请求之后进行一些业务逻辑处理,如存储 检索数据等,然后向客户端返回一个h t m l 页面。但这种方式并没有给予用户 很好的应用体验,当服务器处理数据时,用户则处于等待的状态,而太多的等待 会使用户失去耐心。如下图。 c l a s s i c w e ba p p l i c a t io nm o d e l 7 中国科学技术大学硕= i :学位论文 缓泌n t 图3 1传统w e b 应用模型 传统的w e b 应用中,当负载较小时,这并不会体现出有什么不妥。但是当负 载比较大时,响应时间要很长,这种等待就不可忍受了。更严重的是如果超过了 响应时间,服务器直接告诉你页面不可用。在某些时候,用户只想改变页面一小 部分的数据,却不得不重新加载整个页面,造成了糟糕的用户体验。 而a j a x 技术的出现则改变了这一点。与传统的w e b 应用不同,a j a x 采用 异步交互过程。它通过a j a x 引擎,使应用更流畅,消除了网络交互过程中不断 的处理等待循环。a j a x 引擎允许用户与应用软件之间的交互过程异步进 行,独立于用户与网络服务器间的交互。现在可以通过用j a v a s c r i p t 调用a j a x 引擎来代替产生一个肌p 的用户动作,从而数据编辑、数据校验这些不需要重 新载入整个页面的需求可以交给a j a x 技术来实现。 中国科学技术大学硕上学位论文 怒r 囝瓣抟re 裁棼曦 ; a j 敲e n g 聃 警? i :j 。j 曩o 。、i 夺i 警+ u i i t t p 赫l j 锲钝l 魄簿i s jt r a n s i b c i 癃 l x m l d 矗协 秘舞套i 藩7 。、j j 1 1 i 囊i 黧 ; 蜮鳓d :i o r 黼l 辅茹 :蠢 棼誊舔。:- 蕾一。”i 懋芰 疼毒如氆s 瓣媾b a c k 洲 誊! ;潼p e 鲻3 鹣g ti 警鲈掣劫缴嬲j ; 獭矮裕彝磷黪0 a ;j a x w e ba p p l i c a t i o nm o d e l 溅鬻蒸豢囊鎏一 雾鬟蓊霉 譬霭溶一 ;鬻鬻熬 镶辫拣;喜 盘 四 铲解 盘 0 哥 霪 司 鬻攀 图3 - 2a j a x 应用模型 使用a j a x 技术,可以为开发人员和终端用户带来很大的便捷性: 减轻服务器的负载。a j a x 的原则是“按需获取数据”,可以最大程度的 减少冗余请求和响应对服务器造成的负担。 无刷新更新页面,减少用户心理和实际的等待时间。 9 矗、n“,t、 ,0菇。 nu _ 蔓 零m岱,瓣建督 黼 删 删 鲫洲、 蝻 晦 、晦 = ;蔑t - 0 。 中国科学技术大学硕士学位论文 带来更好的用户体验。 可以将之前一些服务器负担的工作转移到客户端,利用客户端闲置的能 力来处理,减轻了服务器和带宽的负担。 进一步促进了页面展现和数据的分离。 3 2 2 2 x m l h t t p r e q u e s t 对象 触a x 技术的核心是j a v a s c r i p t 对象x m l h t t p r e q u e s t 对象,它最早是在i e 5 中以a c t i v e x 组件形式出现的。由于只能在i e 中使用,所以大多数开发人员都 没有用x m l h t t p r e q u e s t ,直到最近,m o z i l l a1 0 和s a f a r i1 2 把它采用为事实上 的标准,情况才有改观。x m l h t t p r e q u e s t 并不是一个w 3 c 标准,不过许多功能 已经涵盖在一个新提案中:d o ml e v e l 3 加载和保存规约( d o ml e v e l 3l o a da n d s a v es p e c i f i c a t i o n ) 。因为它不是标准,所以在不同浏览器上的表现也稍有区别, 不过大多数方法和属性都得到了广泛的支持。当前,f i r e f o x 、s a f a r i 、o p e r a 、 k o n q u e r o r 和匝都以类似的方式实现了x m l h t t p r e q u e s t 对象的行为。下面介绍 一下如何使用x m l h t t p r e q u e s t 对象来实现m a x 操作。 在使用x m l h t t p r e q u e s t 对象发送请求和处理响应之前,必须先用j a v a s c r i p t 创建一个x m l h t t p r e q u e s t 对象。由于x m l h t t p r e q u e s t 不是一个w 3 c 标准,所 以可以采用多种方法使用j a v a s c r i p t 来创建x m l h t t p r e q u e s t 的实例。把 x m l h t t p r e q u e s t 实现为一个a c t i v e x 组件,其他浏览器( 如f i r e f o x 、s a f a r i 和 o p e r a ) 把它实现为一个本地j a v a s c r i p t 对象。由于存在这些差别,j a v a s c r i p t 代码 中必须包含有关的逻辑,从而使用a c t i v e x 技术或者使用本地j a v a s c r i p t 对象技 术来创建x m l h t t p r e q u e s t 的一个实例。具体创建的代码片断如下: v a rx m l h t t p ; f u n c t i o nc r e a t e x m l h t t p r e q u e s t 0 i f ( w i n d o w a c t i v e x o b j e c t ) x m l h t t p = n e wa c t i v e x o b je c t ( “m i c r o s o f t x m l h t r p ”) ; e l s ei f ( w i n d o w x m l h t t p r e q u e s t ) x m l h t t p = n e wx m l h t t p r e q u e s t 0 ; ) 1 0 中国科学技术人学硕士学位论文 表3 2 2 1 显示了x m l h t t p r e q u e s t 对象的一些典型方法。 方法 描述 a b o r t 0 停止当前请求 g e t a l l r e s p o n s e h e a d e r s 0 把h t t p 请求的所有响应首部作为键 值对返回 g e t r e s p o n s e h e a d e r ( h e a d e r ”) 返回指定首部的串值 o p e n ( “m e t h o d , u r l ”) 建立对服务器的调用。m e t h o d 参数可以 是g e t 、p o s t 或p u t 。u r l 参数可以 是相对u r l 或绝对u r l 。这个方法还 包括3 个可选的参数。 s e n d ( c o n t e n t ) 向服务器发送请求。 s e t r e q u e s t h e a d e r ( h e a d e r , v a l u e ”) 把指定首部设定为所提供的值。在设定 任何首部之前必须先调用o p e n o 表3 1 标准x m l h t t p r e q u e s t 操作 下面详细叙述一下其中的两个主要方法。 v o i d o p e n ( s t r i n gm e t h o d ,s t r i n gu r l ,b o o l e a na s y n c h ,s t r i n gu s e r n a m e ,s t r i n g p a s s w o r d ) :这个方法建立对服务器的调用。这是初始化一个请求的纯脚本方法。 它有两个必要的参数,还有3 个可选的参数。要提供调用的特定方法( g e t 、p o s t 或p u n ,还要提供所调用资源的u r l 。另外还可以传递一个b o o l e a n 值,指示 这个调用是异步的还是同步的。默认值为t r u e ,表示请求本质上是异步的。如果 这个参数是f a l s e ,处理就会等待,直到从服务器返回响应为止。由于异步调用 是使用a j a x 的主要优势之一,所以一般均设置为t r u e 。最后两个参数允许你指 定一个特定的用户名和密码。 v o i ds e n d ( c o n t e n t ) :这个方法具体向服务器发出请求。如果请求声明为异步 的,这个方法就会立即返回,否则它会等待直到接收到响应为止。可选参数可以 是d o m 对象的实例、输入流,或者串。传入这个方法的内容会作为请求体的一 部分发送。 除了这些标准方法,x m l h t t p r e q u e s t 对象还提供了许多属性,如表3 2 2 2 中国科学技术大学硕士学位论文 所示。 属性描述 o n r e a d y s t a t e c h a n g e 每个状态改变时都会触发这个事件处理器,通常会调用 一个j a v a s c r i p t 函数 r e a d y s t a t e请求的状态,有5 个可取值:0 = 未初始化,1 = 正在 加载,2 = 已加载,3 = 交互中,4 = 完成 r e s p o n s e t e x t 服务器的响应,表示为一个串 r e s p o n s e x m l服务器的响应,表示为x m l 。这个对象可以解析为一 个d o m 对象 s t a t u s 服务器的h t t p 状态码( 2 0 0 对应o k ,4 0 4 对应n o t f o u n d ( 未找到) ,等等) s t a t u s t e x t h t r p 状态码的相应文本( o k 或n o tf o u n d 等等) 表3 2标准x y f l a t t t p r e q u e s t 属性 3 2 2 3 文档对象模型( d o m ) d o m 也是a j a x 的核心技术之一,a j a x 利用其来进行动态显示和交互。 w 3 c 主页提供了d o m 的清晰定义: 文档对象模型( d o m ) 是与平台和语言无关的接口,允许程序和脚本动态地访 问和更新文档的内容、结构和样式。文档可以进一步处理,处理的结果可以放回 到所提供的页面中。 w 3 cd o m 标准的制定,避免了2 0 世纪9 0 年代末的脚本噩梦,那时相互竞 争的浏览器都有自己专用的对象模型,而且通常都是不兼容的,这就使得实现跨 平台的脚本极其困难。而d o m 标准的制定则为脚本访问对象模型提供了通用的 方法,有了w 3 cd o m 就可以编写简单的跨浏览器脚本,从而充分利用x m l 的 强大功能和灵活性,将x m l 作为浏览器和服务器之间的通信介质。 下面的表格列出了d o m 的一些有用的属性和方法。 属性名描述 c h i l d n o d e s 返回当前元素舯所有子元素的数组 f i r s t c h i l d 返回当前元素的第一个下级子元素 1 2 中国科学技术大学硕:i - 学位论义 l a s t c h i l d返回当前元素的最后一个子元素 n e x t s i b l i n g 返回紧跟在当前元素后面的元素 n o d e v a l u e指定表示元素值的读写属性 p a r e n t n o d e 返回元素的父结点 p r e v i o u s s i b l i n g 返回紧邻当前元素之前的元素 表3 3用于处理 0 t l 文档的d o m 元素属性 方法名描述 g e t e l e m e n t b y l d ( i d )( d o c u m e n t ) 获取有指定唯一i d 属性值文档中的元素 g e t e l e m e n t b y t a g n a m e ( n a m e ) 返回当前元素中有指定标记名的子元素的 数组 h a s c h i l d n o d e s 0 返回一个布尔值,指示元素是否有子元素 g e t a t t r i b u t e ( n a m e ) 返回元素的属性值,属性由n a m e 指定 表3 4用于遍历x m l 文档的d o m 元素方法 属性方法描述 d o c u m e n t c r e a t e e l e m e n t ( t a g n a m e ) 文档对象上的c r e a t e e l e m e n t 方法可以创建 由t a g n a m e 指定的元素。如果以串d i v 作为 方法参数,就会生成一个d i v 元素 d o c u m e n t c r e a t e t e x t n o d e ( t e x t ) 文档对象的c r e a t e t e x t n o d e 方法会创建一 个包含静态文本的节点 a p p e n d c h i l d ( c h i l d n o d e ) a p p e n d c h i l d 方法将指定的节点增加到当前 元素的子节点列表( 作为一个新的子节点) 。 例如,可以增加一个o p t i o n 元素,作为s e l e c t 元素的子节点。 g e t a t t r i b u t e ( n a m e ) 这两个方法分别获得和设置元素中n a m e s e t a t t r i b u t e ( n a m e ,v a l u e ) 属性的值 i n s e r t b e f o r e ( n e w n o d e ,t a r 这个方法将节点n e w n o d e 作为当前元素的 g e t n o d e ) 子节点插到t a r g e t n o d e 元素前面。 r e m o v e a t t r i b u t e ( n a m e ) 这个方法从元素中删除属性n a m e r e m o v e c h i l d ( c h i l d n o d e ) 这个方法从元素中删除子元素c h i l d n o d e 中国科学技术大学顶j :学位论文 r e p l a c e c h i l d ( n e w n o d e ,o l这个方法将节点o l d n o d e 替换为节点 d n o d e ) n e w n o d e 表3 5动态创建内容时所用的d o m 属性和方法 可以通过使用j a v a s c r i p t 来调用以上d o m 属性和方法来读取x m l 文档,并 最终更新界面显示。 3 2 3 a o p 思想 3 2 3 1 a o p 背景 面向对象技术很好地解决了软件系统中角色划分的问题。借助于面向对象的 分析、设计和实现技术,开发者可以将问题领域的“名词 转换成软件系统中的 对象,从而很自然地完成从问题到软件的转换。 但是,问题领域的某些需求却偏偏不是用这样的“名词”来描述的。例如像 这样的问题:需要对系统中的某些方法进行日志记录,这种需要记录方法散布在 4 0 多个类中。面对这种需求,应该怎么办呢? 最直接的办法就是:创建一个超类( 或 接口) ,将日志的功能放在其中,并让所有需要日志功能的类继承这个超类( 或接 口) 。如果这个需求是后期提出的,需要修改的地方就会分散在4 0 多个文件中。 这样大的修改量,无疑会增加出错的几率,并且加大系统维护的难度。 人们认识到,传统的程序经常表现出一些不能自然地适合单个程序模块或者 几个紧密相关的程序模块的行为例如日志记录、对上下文敏感的错误处理、性能 优化以及权限控制等等、将这种行为称为“横切关注点 心1 ,因为它跨越了给定 编程模型中的典型职责界限。如果使用过用于横切关注点的代码,您就会知道缺 乏模块性所带来的问题。因为横切行为的实现是分散的,开发人员发现这种行为 难以作逻辑思维、实现和更改。 因此,面向方面的编程( a o p ) 应运而生。a o p 为开发者提供了一种描述横切关 注点的机制,- 并能够自动将横切关注点织入到面向对象的软件系统中,从而实现 了横切关注点的模块化。通过划分a s p e c t 代码,横切关注点变得容易处理。开发 者可以在编译时更改、插入或除去系统的a s p e c t ,甚至重用系统的a s p e c t 。 更重要的是,a o p 可能对软件开发的过程造成根本性的影响。可以想象这样 1 4 中国科学技术大学硕士学位论文 一种情况:o o p 只用于表示对象之间的泛化特化关系,而对象之间的横向关 联则完全用a o p 来表现。这样,很多给对象之间横向关联增加灵活性的设计模式 ( 例女n d e c o r a t o r ,r o l eo b j e c t 等) 将不再必要。 现在大多数软件项目都选择o o p 的编程方式。确实,o o p 已经表现了它处理一 般行为的能力,但是,将会看到:o o p 不能很好地处理横越多个经常是不相 关的模块的行为。相比之下,a o p 填补了这个空白,它是编程方法学发展的 一个里程碑。 3 2 3 2 a o p 相关概念 a o p 思想中产生了很多重要的概念,而这些概念大多出自a s p e c t j 的创始人。 关注点( c o n c e r n ) :一个关注点可以是一个特定的问题、概念、或是应用 程序的兴趣区间总而言之,应用程序必须达到的一个目标。譬如安 全性、事务管理、性能监控都是系统中常见的关注点。在一个o o 的应用 程序中,关注点可能已经被代码模块化,也可能还散落在整个对象模型 中。 横切关注点( c r o s s c u t t i n gc o n c e r n ) :如果一个关注点的实现代码散落 在很多个类或方法之中,我们就称之为“横切关注点”。 方面( a s p e c t ) :一个方面是对一个横切关注点的模块化,它将那些原本 散落在各处的、用于实现这个关注点的代码归整到一处。 连接点( j o i np o i n t ) :程序执行过程中的一点,例如: 方法调用( m e t h o di n v o c a t i o n ) :对方法( 可能包括构造子) 的调用, 不过并非所有a o p 框架都支持在对象构造时的增强( a d v i c e ) 。 字段访问( f i e l da c c e s s ) :读或写实例变量。同样,并非所有a o p 框架都支持对字段访问的增强。那些支持这类增强的a o p 框架都可 以区分读操作和写操作。 异常抛出( t h r o w s ) :特定的异常被抛出。 增强( a d v i c e ) :在特定连接点执行的动作。很多a o p 框架都以拦截器 ( i n t e r c e p t o r ) 的形式来表现增强所谓拦截器是这样一个对象:当 连接点被调用时,它会收到一个回调消息。增强的例子包括: 中国科学技术人学硕二b 学位论文 在允许执行特定连接点之前,检查安全凭证。 在执行某个方法连接点之前开启事务,在连接点执行完毕后提交或 回滚事务。 切入点( p o i n t c u t ) :一组连接点的总称,用于指定某个增强应该在何 时被调用。切入点常用正则表达式或别的通配符语法来描述。有些a o p 实现技术还支持切入点的组合。 引介( i n t r o d u c t i o n ) :为一个现有的7 a v a 类或接口添加方法或字段。 这种技术可以用于实现7 a v a 中的多继承,或者给现有对象模型附加新 的a p i 。 混入继承( m i x i ni n h e r i t a n c e ) :一个“混入类”封装了一组功能,这 组功能可以被“混入”到现有的类当中,并且无须求助于传统的继承 手段。在a o p 中,混入是通过引介来实现的。 织入( w e a v i n g ) :将方面整合到完整的执行流程( 或完整的类,此时被 织入的便是引介) 中。 当执行流程进展到连接点时,增强会首先接管流程控制权。当增强允许执行 流程继续前进,执行真正的方法调用或字段访问时,我们就说这次操作发生 ( p r o c e e d ) 了。 下面,再深入说明一下不同类型的增强: 前增强( b e f o r e ,p r e ) :在连接点调用之前,首先调用增强。 后增强( a f t e r ,p o s t ) :在连接点调用之后,再调用增强。在a s p e c t j 中,后增强又分为三种: 在调用成功完成( 没有异常抛出) 之后。a s p e c t j 和s p r i n g 都将这种 增强称为“返回后增强 ( a f t e rr e t u r n i n ga d v i c e ) 。 在抛出某种特定类型( 或其子类型) 的异常之后。a s p e c t j 称之为“抛 出后增强 ( a f t e rt h r o w i n ga d v i c e ) ,s p r i n g 称之为“抛出增强 ( t h r o w sa d v i c e ) 。+ 在连接点的任何调用之后,不管调用是否抛出异常。a s p e c t 7 称之为 “后增强”( a f t e ra d v i c e ) 。 环绕增强( a r o u n d ) :这类增强可以完全控制执行流程。除了完成本身的 中国科学技术大学硕士学位论文 工作之外,它还需要负责主动调用连接点,促使真实的操作发生这 通常是通过调用某个特定的方法来完成的。 不同类型的增强接受的参数也不一样,譬如说,后增强可以获得实际方法的 返回值,但抛出增强则不能。 环绕增强可以用于实现所有其他类型的增强,只要主动促使实际操作发生即 可。譬如说,如果你需要抛出异常,你可以在环绕增强中调用实际操作,并捕捉 其中抛出的一切异常,再看捕捉到的异常是否符合预期的规则。从可用性的角度 出发,a s p e c t j 团队选择将环绕增强和其他增强区分开。在他们看来,应该尽量 使用功能最弱、目的最明确的增强,这样可以使程序更加清晰。譬如说,前增强 或后增强不会改变连接点的返回值,而环绕增强则有可能;再譬如说,如果使用 环绕增强,开发者也可能没有正确地调用连接点。 3 2 3 3 a o p 实现 实现a o p 技术的主要策略包括以下几种【5 】: j 2 s e 动态代理 动态字节码生成 j a v a 代码生成 使用定制的类加载器 语言扩展 下面依次讨论这几种实现策略。 动态代理:在j a v a 中,实现a o p 最显而易见的策略莫过于使用j a v a l 3 引入 的动态代理( d y n a m i cp r o x i e s ) 。动态代理是一种强大的语言结构,它使开发者可 以为一个或多个接口“凭空”地创建实现对象,而不需要预先有一个实现类。如 果需要用动态代理实现环绕增强,可以在其中调用必要的拦截器链。拦截器链上 的最后一个拦截器将借助反射调用目标对象如果有目标对象的话。 动态代理最大的好处在于:这是一个标准的j a v a 语言特性。除了a o p 框架 之外不需要第三方库,也不会收到应用服务器的任何影响。 动态代理的最大局限性在于:它只能针对接口进行代理,不能针对类。一般 情况下,这项限制并不是坏事,因为a o p 主要针对业务对象,而业务对象通常 1 7 中国科学技术大学硕:l 学位论文 应该是放在业务接口之后的。 动态代理在j a v a l 4 和更高版本的j v m 中性能表现相当好。不过,一旦使用 动态代理的实现策略,便不可避免的会招致反射调用的开销。 动态字节码生成:为了针对j a v a 类提供代理,需要动态代理之外的工具,那 就是动态字节码生成( d y n a m i cb y t ec o d eg e n e r a t i o n ) 。j a v a 的反射和类加载机制都 非常开放,因此实现起来并不复杂。在这方面,最流行的工具是c g l i b ( c o d e g e n e r a t i o nl i b r a r y ) 。在s p r i n g 框架中,如果需要针对类( 而不是接口) 提供代理, 就会用到c g l i b 。它可以针对指定的类动态生成一个子类,并覆盖其中的方法, 从而实现方法拦截。 j a v a 代码生成:可以生成新的j a v a 源码,在其中执行横切性的代码,就像 e j b 的代码生成策略一样。但是随着动态代理和动态字节码生成技术的出现,这 种做法正在逐步减少。 使用定制的类加载器:通过定制一个自制的类加载器,可以在一个类被加载 时自动对其进行增强。即使用户直接使用f l e w 操作符构造实例,增强仍然会生 效。j b o s s 和a s p e c t w e r k z 都采用这种做法对j a v a 类进行增强,具体的增强信息 则是在运行时从x m l 配置文件中读取。这种做法的风险在于它偏离了j a v a 的标 准。在某些应用服务器中,这种做法可能会导致问题,因为j 2 e e 服务器需要控 制整个类加载的层次体系。 语言扩展:如果希望把方面当作一等公民来看待,就需要一种同时支持a o p 和o o p 的语言。为了达到这个目的,可以对现有的0 0 语言进行扩展,就像c + + 扩展c 语言、引入0 0 的概念一样。a s p e c t j 就对j a v a 进行了这样的扩展。 下面,我们将讨论一些具体的a o p 实现。 a s p e c t j 最完善的a o p 实现非a s p e c t j 莫属,这是一种j a v a 语言的扩展,将a o p 概 念作为一等公民来对待。a s p e c o 提供了自己的编译器。 别的a o p 框架大多使用标准的j a v a 语言,并将切入点定义移到x m l 文件 中。和它们不同,a s p e c t j 只使用j a v a a s p e c o 代码,不使用其他任何形式的元 数据。这种做法有一些好处,譬如说可以提供更强的类型安全性。然而它也有其 缺陷。 中国科学技术大学硕士学位论文 在a s p e c t j 中,切入点和方面都是语言的一等公民,例如方面可以有继承关 系。另外,a s p e c t j 允许通过系列的条件来指定切入点,可用的条件包括通配 符和控制流。 a s p e c t j 可以对任何方法调用、字段访问、对象构造、异常抛出进行增强。 不论对象如何构造或获取,增强一律有效,并且使用于任何类装载器。织入是在 编译器进行的,不过a s p e c t j 在设计时已经尽量避免依赖于特定的织入时机。横 切代码被直接编译到被增强的类之中。 a s p e c t j 拥有一些特有的功能,例如可以改变类型的静态结构。譬如说, a s p e c t j 可以给一个已有的类添加成员变量或成员方法,可以改变类型继承体系, 可以声明编译器错误和警告,也可以“软化 异常f 让方法可以抛出未经声明的 受控异常) 。 a s p e c t j 有很多优点: 1 ) 成熟。 2 ) 文档丰富。有很多在线资源可以利用,而且还有好几本关于a s p e c t j 的 书。 3 ) i d e 支持日益充分,尤其是在e c l i p s e 中。现在,e c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论