(计算机软件与理论专业论文)基于aop的mvc模式研究与应用.pdf_第1页
(计算机软件与理论专业论文)基于aop的mvc模式研究与应用.pdf_第2页
(计算机软件与理论专业论文)基于aop的mvc模式研究与应用.pdf_第3页
(计算机软件与理论专业论文)基于aop的mvc模式研究与应用.pdf_第4页
(计算机软件与理论专业论文)基于aop的mvc模式研究与应用.pdf_第5页
已阅读5页,还剩68页未读 继续免费阅读

(计算机软件与理论专业论文)基于aop的mvc模式研究与应用.pdf.pdf 免费下载

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

文档简介

中文摘要 摘要 在现代软件开发领域,基于b s 模式的开发技术越来越流行,但是在运用b s 模式进行软件开发的过程中,人们遇到了由于用户需求改变,需要大规模修改核 心业务逻辑代码,从而增加了开发的费用,延长了丌发周期,增加了后期代码维 护的难度等问题。随后,设计模式被提出用来解决这类问题,m v c 模式就是其中 之一,至今其仍是b s 架构下最受欢迎的开发模式,尤其是在j 2 e e 开发领域。它 为应用系统的开发环境提供了一种分层的体系结构,即:模型层、视图层和控制 层。由于面向对象技术在解决跨越多个模块的横切关注点问题上固有的缺陷,使 得采用面向对象技术的j 2 e em v c 开发模式,在处理横切关注点问题时具有较大 的局限性。 面向方面编程技术( a s p e c t o f i e n t mp r o g r a m m i n g ) 正是鉴于面向对象编程技 术在处理横切关注点时的弊端而出现的。它以解决横断现象为出发点,用最小的 耦合处理每个关注点,使横切关注点也是模块化的。面向方面技术将贯穿系统的 横切关注点提取出来,形成方面层,使用配置文件声明方面的织入点,以提高重 用率,提高代码的可维护性。 本文选取目前j 2 e e 领域最为流行的m v c 架构s t r u t s ,将面向方面技术引入 s t r u t s 中,将s t r u t s 的模型层按照核心关注点和横切( 非核心) 关注点分为两层, 应用a o p 技术实现非核心关注点,提出一种新的架构模式a o m v c 模式,使基 于面向对象技术的s t r u t s 框架可以较好的解决横切关注点及其带来的众多问题。 关键词:面向方面编程;设计模式;w c ;面向对象 英文摘要 r e s e a r c ha n da p p l i c a t i o n so fm v c p a t t e r nb a s e d o na o p a b s tr a c t h lt h ef i e l do fm o d e r ns o f t w a r ed e v e l o p m e n t t h ed e v e l o p m e n tt e c h n o l o g yw h i c h b a s e do nt h em o d eo fb si sb e c o m i n gm o r ea n dm o r ei m p o r t m e n t h o w e v e r , i nt h e s o f t w a r ed e v e l o p m e n tp r o c e s s ,e s p e c i a l l yw h e nc u s t o m e rr e q u e s tc h a n g e so v e rt i m ea n d t h ec o r ec o d i n gn e e dt ob er e v i s e dt or e f l e c tt h o s ec h a n g e s ,p e o p l ea r eh a v i n gm a n y d i f f i c u l t i e so fs o f t w a r ed e v e l o p m e n tc o s ts t r e t c h ,d e v e l o p m e n tc y c l ee x t e n t i o na n d d i f f i c u l t i e so fm a i n t e n a n c e l a t e r ,t h ed e s i g np a t t e r nw a sp u tf o r w a r dt os o l v et h i s p r o b l e m , t h em v c i so n eo ft h ep a t t e r n sw h i c hi st h em o s tp o p u l a rp a t t e r n s ,e s p e c i a l l y i nt h ea r e a so fj 2 e ed e v e l o p m e n t i tp r o v i d e ss u b - l a y e ra r c h i t e c t u r ef o rt h es y s t e m s d e v e l o p p i n g ,n a m e d :m o d e l ,v i e w ,c o n t r 0 1 b e c a u s e o ft h ed e f i c i e n c i e so f o b j e c t - o r i e n t e dt e c h n o l o g yi ns o l v i n gt h ec r o s s c u t t i n gc o n c e r n s ,s ot h ej 2 e em v c p a t t e r nh a st h es a m ep r o b l e m t o o a s p e c t o r i e n t e dp r o g r a m m i n g ( a o p ) i sb o r n f o rr e m o v i n gt h ed r a w b a c ki n d e a l i n gw i t hc r o s s - c u t t i n gc o n c e r n s i ta i m sa tr e s o l v et h ec r o s s i n gp r o b l e m ,d i s p o s e s e v e r yc o n c e r nw i t ht h el e a s tc o u p l i n ga n dm a k e sc r o s s - c u t t i n gc o n c e r n sm o d u l a r i z e d t o o t h ea s p e c t o r i e n t e dt e c h n o l o g ye x t r a c t st h ec r o s s - c u t t i n gc o n c e r n sf r o mt h e s y s t e m ,d e c l a r e st h ew e a v i n gp o i n ti nac o n f i g u r a t i o nf i l e ,i n c w a s e dt h er e u s a b i l i t ya n d m a i n t a i n a b i l i t yo fc o d e s t h i sp a p e ru s et h ea s p e c t o r i e n t e dt e c h n o l o g yi nt h em o s tp o p u l a rj 2 e em v c f r a m e w o r ks t r u t s ,t h e nd i v i d e dt h em o d e ll a y e ri n t ot w ot i e r sa c c o r d i n gw i t ht h ec o r e a n dc r o s s c u t t i n gc o n c e r n s ( n o n _ c o r ec o n c e r n s ) ,a n dp r o p o s e dan e wa o - m v cp a t t e r n t h ec r o s s c u t t i n gc o n c e r n sa r ec o d i n gw i t ha o p ,w h i c he n h a n c e dt h ea b i l i t yo fs t r u t s t od e a l i n gw i t ht h ec r o s s c u t t i n gc o n c e m sa n do t h e rp r o b l e m sc a u s e db yc i d s s c u t t i n g k e y w o r d s :a s p e c t o r i e n t e dp r o g r a m m i n g ;d e s i g np a t t e r n ;m v c ;o b j e c t - o r i e n t e d 大连海事大学学位论文原创性声明和使用授权说明 原创性声明 本人郑重声明:本论文是在导师的指导下,独立进行研究工作所取得的成果, 撰写成硕士学位论文“基于a o p 的m v c 模式研究与应用”。除论文中已经注明引用 的内容外,对论文的研究做出重要贡献的个人和集体,均已在文中以明确方式标 明。本论文中不包含任何未加明确注明的其他个人或集体已经公开发表或未公开 发表的成果。 本声明的法律责任由本人承担。 敝储獬:、辛埒舻3 月妒 学位论文版权使用授权书 本学位论文作者及指导教师完全了解“大连海事大学研究生学位论文提交、 版权使用管理办法 ,同意大连海事大学保留并向国家有关部门或机构送交学位论 文的复印件和电子版,允许论文被查阅和借阅。本人授权大连海事大学可以将本 学位论文的全部或部分内容编入有关数据库进行检索,也可采用影印、缩印或扫 描等复制手段保存和汇编学位论文。 蝣:饿墨翥曼硎 基于a o p 的m v c 模式研究与应用 第1 章绪论 1 1 问题的提出 如今,i n t e m e t 已融入人们的生活,因此各种w e b 应用系统也应运而生,尤其 是电子商务、电子政务等应用已经成为热门领域,b s 开发模式逐渐成为系统开发 的主流。随着计算机软件事业的不断发展,用户对于操作界面的美观、使用等方 面的要求越来越高,以及在开发过程中用户的需求不断改变,导致部分甚至全部 工程逻辑代码的大量修改,最终导致了基于w e b 的m v c 框架模式的流行,这其 中s t r u t s 就是最流行的m v c 框架。 m v c ( m o d e l - v i e w - c o n t r o l l e r ) 模式把一个应用的输入、处理、输出流程按照 m o d e l 、v i e w 、c o n t r o l l e r 的方式进行分离,这样一个应用被分成三个层模型 层、视图层、控制层。s t r u t s 框架对控制层和视图层有明确的定义,但对于模型 层没有具体明确的定义,主要由开发人员按照自己的模式编写处理业务逻辑的代 码,而且面向对象开发方法是当今软件开发领域的主流方法,因此使得模型层不 能很好的处理跨越多个模块的公共行为,造成了与业务逻辑有关的核心代码与非 核心代码的混杂,降低了代码的重用率及开发效率。 面向方面编程( a s p e c t - - o r i e n t e dp r o g r a m m i n g ) 正好可以解决这一问题。它允 许开发者动态地修改0 0 模型,构造出一个能够不断增长以满足新增需求的系统, 就像现实世界中的对象会在其生命周期中不断改变自身,应用程序也可以在发展 中拥有新的功能。a o p 利用一种称为“横切”的技术,剖解开封装的对象内部, 并将那些影响了多个类的行为封装到一个可重用模块,并将其命名为“a s p e c t ”, 即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共 同调用的逻辑或责任,例如事务处理、日志管理、权限控制等,封装起来,便于 减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护 性。 第1 章绪论 1 2 国内外研究现状 现在流行的两种实现企业级应用软件的平台:j 2 e e 和d o t n e t 。一般来说, d o t n e t 能够迅速上手,但随着规模的扩大会变得难以维护。j 2 e e 相对比较复杂 和开放,但可以研究得较为深入,所以适合中大型规模的应用软件开发。但无论 是j 2 e e 平台还是d o t n e t 平台,都要求通过开发框架标准化整个开发结构,这 一点在j 2 e e 领域更为如此。j 2 e e 提供了一种技术规范和丰富的基础服务组件, 开发者基于这些技术规范和服务组件,采用特定的开发框架进行应用程序的开发。 而且,由于j 2 e e 的开放性,有很多公司和开发者汇聚在起,推动j 2 e e 技术迅 速发展。 在j 2 e e 领域中,出现了各种各样的开发框架。如e j b 框架、s t r u t s 、w e b w o r k 、 t a p e s t r y 、j s f 框架,还有数据库访问的h i b e r n a t e 、i b a t i s 、t o p l i n k 等框架。针对 不同的应用,不同的层次都有很多相应的框架。这些框架整合了j 2 e e 所提供的基 础服务组件,基于设计模式和架构模式,提出了最佳开发路径。这些框架的出现 极大推动了j 2 e e 技术,特别是基于w e b 的j 2 e e 技术的发展。由于j 2 e e 是基于 面向对象技术的,而在面向对象世界里,软件被划分为多个离散的类,每个类担 任一个角色,一次来实现软件系统角色的划分。但是类与类之间的关系通常实施 错综复杂的,面向对象只通过集成表达了纵向的联系,而类与类之间横向的联系 是其所忽略的,结果导致类之间的一些共同属性散乱分布在各个类的代码中。从 角色划分角度来说,类由于承担了多个角色而使之代码混乱,结果使得封装不严 密,划分的角色也不清晰,这显然与面向对象思想相违背;而且从软件的维护和 复用的角度来考虑,这样的设计将给维护和复用带来沉重的负担。此外,面向对 象在大型系统、分布式系统和灵活性要求较高的系统中也存在很多局限。先后有 多种方法被提出用来解决这些问题,在这些方法中面向方面技术是最流行的。在 面向对象世界里,软件被划分为多个离散的类,每个类担任一个角色,一次来实 现软件系统角色的划分。但是类与类之间的关系通常实施错综复杂的,面向对象 只通过集成表达了纵向的联系,而类与类之间横向的联系时其所忽略的,结果导 基于a o p 的m v c 模式研究与应用 致类之间的一些共同属性散乱分布在各个类的代码中。从角色划分角度来说,类 由于承担了多个角色而代之代码混乱,结果使得封装不严密,划分的角色也不清 晰,这显然与面向对象思想相违背;而且从软件的维护和复用的角度来考虑,这 样的设计将给维护和复用带来沉重的负担。此外,面向对象在大型系统、分布式 系统和灵活性要求较高的系统中也存在很多局限。先后有多种方法被提出用来解 决这些问题,在这些方法中面向方面技术是最流行的。 2 0 实际9 0 年代美国x e r o xp a l oa l t or e a e a r c hc e n t e r ( p a r c ) 研究中心首席科学 家g r e g o rk i c z a l e s 与1 9 9 7 年欧洲面向对象程序设计大会( e c o o p 9 7 ) 提出了面向方 面程序设计:a s p e c t - o r i e n t e dp r o g r a m m i n g ( a o p ) 。其目的就是让程序编写人员能 够在自己的代码中将“横切结构”模块化h ,2 1 ,模块化带来的优势就是高生产率和 扩展性【3 4 j 面向方面技术就诞生于这样的应用背景,它不是面向对象技术的替代品,而 是对面向对象技术的进一步补充完善,两者相辅相成p j 。在某些场合下,a o p 可 以很轻松的解决o o p 沉重的负担,通过比较a o p 与o o p 实现设计模式的方法的 差异,我们发现a o p 应用在对象之间横向关系较为频繁的场合下非常自然且功能 强大。这些原先在o o p 中需要很多技巧的工作,a o p 却能轻松解决。a o p 通过 a s p e c t 来模块化软件中的横切关注点( c r o s s - c u t t i n gc o n c e r n s ) 。这些关注点包括同步 控制、日志记录、性能优化、安全验证等等,严格并且彻底清晰的划分了软件各 部分的功能角色。a o p 中的类只需明确自己的主要职责,o o p 中分散或交织在核 心功能模块中的横切关注点被从中抽取出来,交给a s p e c t 实现模块化管理,从而 降低了类与类之间的耦合度,增强了类的内聚度,使软件更易于维护、使用和扩 展,使系统架构更为灵活、轻便。 1 3 研究内容 本论文的主要目标是在基于j 2 e e 的w e b 应用开发技术等理论的基础上,设 计一个新的w e b 应用框架模式a o m v c 。 具体来说,本论文的研究内容主要包括以下几个方面: 第1 章绪论 1 研究w e b 应用开发技术尤其是基于j 2 e e 的w e b 应用开发技术及现有w e b 应用开发的体系结构模式,分析其优点和缺点。 2 研究面向方面编程( a s p e c t - - o r i e n t e dp r o g r a m m i n g ) 技术,并应用a o p 技术 提出一种结构上更适合w e b 应用的体系结构模式a o m v c 。 3 研究现有的w e b 应用框架,以s t r u t s 为例,分析它的优缺点,应用a o m v c 模式对其进行改进。 4 设计实现一个电子商务系统,以验证a o m v c 框架模式的可行性。 1 4 论文结构安排 全文共分为五个章节。 第l 章绪论,主要介绍课题的提出及国内外研究现状。 第2 章介绍面向方面技术的产生背景、原理及相关概念实现技术等。 第3 章介绍了j 2 e e 领域的传统的s t r u t sm v c 框架模式及其优缺点。 第4 章在s t r u t s 框架基础上引入面向方面编程技术,提出新的a o m v c 框架 模式及其实现方法。 第5 章应用a o - m v c 模式设计实现一个电子商务系统。 最后,结论部分对全文进行总结。 基于a o p 的m v c 模式研究与应用 第2 章a o p 技术 2 1a o p 起源介绍 传统的软件开发主要是以面向对象编程技术( o o p ) 和思想实现,借助于面 向对象的分析、设计和实现技术,开发者可以将问题领域的“名词”转换成软件 系统中的对象,从而很自然地完成从问题到软件的转换。面向对象设计最根本的 魅力在于,它能够将真实世界领域中的实体及各自的行为建模为抽象的对象。但 是对象模型和问题域有时候并不能很好的吻合,有时候一个需求或关注点经常由 若干对象共同实现,而这些对象又实现了若干其它的需求或关注点,从而导致混 乱和交叉。 软件开发的成本增加主要在于需求的变更。例如,项目在需求最初阶段只关 心了功能的实现而忽略了权限和日志功能,项目结束或者功能升级的时候想要添 加权限控制和需要对系统中的某些方法进行日志记录,这种需要记录的方法散布 在多个类中。最直接的办法就是:创建一个抽象类( 或接口) ,将日志的功能放 在其中,并让所有需要日志功能的类继承这个抽象类( 或接口) ,如果这个需求 是后期提出的,需要修改的地方就会分散在多个文件中。这样的修改,无疑会增 加出错的几率,并且加大系统维护的难度。人们认识到,传统的程序经常表现出 一些不能自然地适合单个程序模块或者几个紧密相关的程序模块的行为,因为它 跨越了给定编程模型中的典型职责界限。对于这类问题需要更好的处理方法【6 j 。 a o p 是一种新的程序设计技术,其概念的出现不过几年的时间,却体现了非 常简单而深刻的“分而治之 的解决问题思想。“分而治之 是指把一个复杂的 问题分解为若干简单的问题,然后逐个解决。这种朴素的思想来源于人们生活与 工作的经验,也同样适合于软件技术领域。其思想的核心就是分散关注,从软件 系统架构角度看,分散关注点的思想在设计之处专注于核心需求,其他各种辅助 功能的需求作为核心功能需求的扩展和补充。因此系统各个功能模块均可以看作 是系统的关注点,一个复杂的系统就是由多个关注点来组合实现的【9 】。 第2 章a o p 技术 面向方面设计思想是一种可以利用的强有力的设计原理。通过将首要的设计 重点从面向对象编程( 0 0 p ) 的传统化特性转移出来,a o p 设计原理允许软件架构师 用一种与面向对象相当而又互补的方式来考虑设计。 a o p 构建在o o p 系统上,可以说o o p 是a o p 的技术基础,a o p 是对o o p 的有力补充和发展。相比于以前的程序设计方法学,a o p 更好地将关注点分离, 从而可以模块化的实现贯穿特性。当使用a o p 编程时,可以结合需, 2 m 问题的特点, 选择合适的实现结构:过程、对象或者a s p e c t ( 方面) 瞵j 。 a o p 比面向对象更好的解决重用和功能扩展问题,主要是功能和框架扩展问 题。以r u p 之父i v a rj a c o b s o n 为代表的科学家们仍对a o p 推崇备至,他认为a o p 将最终改变整个软件开发的方式,并且更完美地实现“用例驱动”的开发思想咿j 。 面向方面编程( a o p ) 从几个不同组织的研究中发展而来,早在1 9 9 0 年开始, 来自x e r o xp a l oa l t or e s e a r c hl a b ( 即p a r c ) 的研究人员就对面向对象思想的局 限性进行了分析。他们研究出了一种新的编程思想,借助这一思想可以减少代码 重复模块,从而帮助开发人员提高工作效率。随着研究的逐渐深入,a o p 也发展成 一套较完整的程序设计思想【lu j 。 a o p 体现了非常简单而深刻的“分而治之”的解决问题思想,和面向对象程 序技术来源于现实世界一样,a o p 这种朴素的思想来源于人们日常的生活和工作 的经验,同样适合软件技术领域。同样符合人类解决问题的思维习惯,从这个意 义上来说a o p 是o o p 的一个很好的延续和补充。其核心思想就是分散关注,把很 多需要按照步骤纵向解决的问题分解出很多的小的横向问题,其原理符合o o p 的 分解问题原则,a o p 把问题分解在横向解决面上。 a o p 分离软件关注点,一个关注点( c o n c e r n ) 就是一个特定的目的,一块我 们感兴趣的区域。从技术的角度来说,一个典型的软件系统包含一些核心的关注 点和系统级的关注点。举个例子来说,一个信用卡处理系统的核心关注点是借贷 存入处理,而系统级的关注点则是日志、事务完整性、授权、安全及性能问题等, 许多关注点一我们叫它横切关注点( c r o s s c u t t i n gc o n c e r n s ) 【l o 】一会在多个 基于a o p 的m v c 模式研究与应用 模块中出现,使用现有的编程方法,横切关注点会横越多个模块,结果是使系统 难以设计、理解、实现和演进。使用0 0 p 编程技术不能很好地处理横越多个一经 常是不相关的二模块的行为,相比之下,a o p 很好的处理了对象之间的横向关联, 增强了横向关联的灵活性。 2 2h 0 p 原理和框架 方面( a s p e c t ) 为那些遍布整个应用程序中但相互之间没有关系的类提供了 模块性。可以在一个地方对方面进行维护,然后在需要的时候把它编织到其他对 象中。如图2 1 所示。 2 3h 0 p 的重要概念 1 c o n c e m ( 关注点) 图2 1a o p 框架 f i g2 1t h ef r a m e w o r ko fa o p 第2 章a o p 技术 一个关注点可以是一个特定的问题、概念、或是应用程序的兴趣区间n 1 ,1 2 1 。 总而言之,应用程序必须达到一个目标。如代码中的安全验证、日志记录等都是 关注点。事务管理、性能检测也是系统中常见的关注点。在二个o o 应用程序中, 关注点可能已经被代码模块化,也可能还散落在整个对象模型中。 2 c r o s s c u t t i n gc o n c e r n ( 横切关注点) 如果一个关注点的实现代码散落在很多个类或方法之中,则称之为“横切关 注点”。 3 a s p e c t ( 方面) 一个方面是对一个横切关注点的模块化,它将那些原本散落在各处的、用于 实现这个关注点的代码规整在一处。p o i n tc u t 和a d v i c e 结合起来就是a s p e c t ,它类 似于o o p 中定义的一个类,但它代表的更多是对象间横向的关系。 4 j o i n tp o i n t ( 连接点) j o i n tp o i n t 就是程序执行过程中的一点,如下面的例子。 m e t h o di n v o c a t i o n ( 方法调用) :对方法的调用。 f i e l da c c e s s ( 字段访问) :读或写实例变量。 t h r o w s ( 异常抛出) :特定的异常抛出。 5 a d v i c e ( 建议) a d v i c e 是p o i n tc u t 的执行代码,是“方面”执行的具体逻辑。很多a o p 框架 都以i n t e r c e p t o r ( 拦截器) 的形式来表现a d v i c e 。所谓拦截器是这样的一个对象: 当连接点被调用的时候,它会收到一个回调( c a l lb a c k ) 信息。 6 p o i n t c u t ( 切入点) 一组j o i m p o i n t 的总称,用于指定某个建议应该用于何处。切入点常用正则表 达式或别的通配符语法来描述。有些a o p 实现技术还支持切入点的组合。 7 i n t r o d u c t i o n ( 引介) 为一个现有的j a v a 类或接口添加方法或字段。这种技术可以用来实现j a v a 中 的多继承,或者适配现有对象模型的a p i 。 基于a o p 的m v c 模式研究与应用 8 m i x i ni n h 面t a n c e ( 混入继承) 一个混入类封装了一组功能,这组功能可以被“混入”到现有的类中,并且 无需求助于传统的继承手段。在a o p 里,m i x i n 通过i n t r o d u c t i o n 来实现,在j a v a 语言中可以通过m i n x i n 来模拟多重继承。 9 w e a v i n g ( 织入) 将a s p e c t ( 方面) 整合到完整的执行流程或完整的类,此时被w e a v i n g 的也是 i n t r o d u c t i o n 。下面再来看一下a o p 中不同类型的a d v i c e 。 1 0 b e f o r ea d v i c e ( 前置建议) 在j o i n tp o i n t 调用之前,首先调用a d v i c e 。 1 1 a f t e ra d v i c e ( 后置建议) 在j o i n tp o i n t 调用之后,再调用a d v i c e 。 12 a r o u n da d v i c e ( 环绕建议) 这类a d v i c e 可以完全控制执行流程。除了完成本身的工作之外,它还要负责 主动调用j o i n tp o i n t ,促使真实的操作( p r o c e e d ) 发生。p r o c e e d 更精确的概念是: 当执行流程进展到j o i n tp o i n t 时,a d v i c e 首先接管程序流程控制权。当a d v i c e 允许 执行流程继续前进时,执行真正的方法调用或字段访问时间,称这次操作发生 ( p r o c e e d ) 了。 2 。4 理解“横切” a o p 技术的核心是“横切”,它将对象剖开,抽出一些内部的属性和行为, 处理后再将剖面复原,不留痕迹。那些被剖开的切面,就是方面( a s p e c t ) 。 1 认识“横切” 使用横切技术,a o p 将系统视为两个部分:核心关注点和横切关注点。业务 处理的主要流程是核心关注点,与之关系不大的则是横切关注点。横切关注点经 常发生在核心关注点处,它们相似或者反复出现,比如权限认证、日志、事务处 理等等。 第2 章a o p 技术 在传统的应用程序中,由于横切行为是分散的,开发者很难对这些行为实施 修改。 2 认识“横切关注点” 在a o p 中,将这些具有公共逻辑的、与其它模块的核心逻辑纠缠在一起的行 为称为“横切关注点( c r o s s c u t t i n gc o n c e r n ) 【6 】,它不是给定编程模型的核心职 主 贝。 一般来说,一个关注点( c o n c e r n ) 就是一个特定的目的,一段相应的逻辑行 为。从技术角度来说,一个典型的软件系统包含一些核心的关注点和系统级的关 注点。 举例来说,一个取款机处理系统的核心关注点是取款终端机和银行之间的金 钱交易逻辑,而系统级的关注点则是日志、事务完整性、授权、安全及性能问题 等,许多关注点( 即横切关注点) 会在多个模块中出现。如果使用现有的编程方 法,横切关注点会横越多个模块,结果是使系统难以设计、理解、实现和演进。 a o p 能够比上述方法更好地分离系统关注点,从而提供模块化的横切关注点。 3 分离核心关注点和横切关注点 一个稍微复杂一点的系统,它由许多关注点组成,如业务逻辑、性能、数据 存储、日志和调度信息、授权、安全、线程、错误检查等,还有开发过程中的关 注点,如易懂、易维护、易追查、易扩展等,如图2 2 所示嘲,演示了由不同模块 实现的一批关注点组成一个系统。 通过对系统需求和实现的识别,可将模块中的这些关注点分为:核心关注点 和横切关注点。对于核心关注点,通常实现这些关注点的模块是相互独立的,它 们分别完成了系统的业务逻辑,这些逻辑与具体的业务需求有关。而对于日志、 安全、持久化等关注点而言,它们是业务逻辑模块所共同需要的,这些逻辑分布 于核心关注点的各处。可以形象的描述如图2 3 所示【6 】。 基于a o p 的m v c 模式研究与应用 安全检查 ,务管理 图2 2 一个典型系统中的横切关注点 f i g 2 2c r o s s c u t t i n gc o l l c e r l l si nat y p i c a ls y s t e m 纵向关注点 软件模块软件模块软件模块软件模块 此eje 务争! 篷ej是j芝 辑tt !t r1 软件的纵向和横向结构 图2 3 软件的纵向和横向结构 f i g 2 3s o f t w a r ev e r t i c a la n dh o r i z o n t a ls t r u c t u r e 横切关注点 在a o p 中,诸如这些模块,都称为横切关注点。应用a o p 的横切技术,关 键就是要实现对关注点的识别。如果将整个模块比喻为一个圆柱体,那么关注点 识别过程可以用三棱镜法则来形容,穿越三棱镜的光束( 指需求) ,照射到圆柱 体各处,获得不同颜色的光束,最后识别出不同的关注点。如图2 4 所示1 3 1 。 第2 章a o p 技术 图2 4 关注点识别:三棱镜法则 f i g 2 4c o n c e r ni d e n t i f i c a t i o n :p r i s mr u l e s 上图识别出来的关注点中,b u s i n e s sl o g i c 属于核心关注点,它会调用到 s e c u r i t ) ,l o g g i n g ,p e r s i s t e n c e 等横切关注点。 p u b l i cc l a s sb u s i n e s s l o g i c p u b l i cv o i ds o m e o p e r a t i o n 0 验证安全性:s e c u r i t y 关注点; 执行前记录日志:l o g g i n g 关注点; d o s o m e t h i n 9 0 ; 保存逻辑运算后的数据;p e r s i s t e n c e 关注点; 执行结束记录日志:l o g g i n g 关注点; ) ) 这种采用一维方法的实现方式,从需求的n 维到实现的一维的笨拙映射,使 得代码呈现互相交织和分散的特点。 2 5 使用a o p 解决横切问题 面向方面编程( a s p e c t o r i e n t e dp r o g r a m m i n g :a o p ) 技术给人们提供了一个崭 新的视角分析和设计软件系统,能很好的解决横切关注点问题n 3 1 。 a o p 的目的,就是在经过关注点识别之后,把诸如l o g g i n g 之类的横切关注 点从b u s i n e s s l o g i c 类中分离出来。利用a o p 技术,可以对相关的横切关注点封装, 基于a o p 的m v c 模式研究与应用 形成单独的“a s p e c t ”。这就保证了横切关注点的复用。由于b u s i n e s s l o g i c 类中不 再包含横切关注点的逻辑代码,为达到调用横切关注点的目的,可以利用编制 ( w e a v e ) 技术,截取b u s i n e s s l o g i c 类中相关方法的消息,例如s o m e o p e r a t i o n ( ) 方法中,然后将这些“a s p e c t 织入到该方法中。如图2 5 所示1 4 1 。 缸- - p e c g u a l s p e c t u a d d e c om p t - s i f i a n r e c o m p o s l t l o n 图2 5 将横切关注点织入到横切关注点中 f i g 2 5w e a v i n gt h ec r o s s c u t t i n gc o n c e r n si n t ot h ec o r ec o n c e r n s 通过利用a o p 技术,改变了整个系统的设计方式。在分析系统需求之初,利 用a o p 的思想,分离出核心关注点和横切关注点。在实现了诸如日志、事务管理、 权限控制等横切关注点的通用逻辑后,开发人员就可以专注于核心关注点,将精 力投入到解决企业的商业逻辑上来。同时,这些封装好了的横切关注点提供的功 能,可以最大限度的复用于商业逻辑的各个部分,既不需要开发人员作特殊的编 码,也不会因为修改横切关注点的功能而影响具体的业务功能。 根据编织发生的时刻,有如下两种编织时刻【15 】: 编译时的静态编织 ,运行时的动态编织 第2 章a o p 技术 业务功能模块 ( 核心关注点) 方 面 编整个系统 织 非业务功能模块 器 ( 非核心关注点) 图2 6 织入过程 f i g 2 6t h ew e a v i n g 因此编织工具可以是预处理器、编译器、后编译的连接器,还可以是载入程 序、册编译器或者虚拟机。 2 6a o p 技术优势 采用a o p 技术主要有一下几点优势: 1 可扩展性:可扩展性指软件系统在需求更改时程序的易更改能力。a o p 提 供系统的扩展机制,通过扩展a s p e c t 或增加a s p e c t ,系统相关的各个部分都随之产 生变化。由此带来的另一好处是在软件测试中,通过屏蔽某些a s p e c t ,可以大大简 化软件的测试复杂度,提高测试精度。同时由于a s p e c t 模块根本不知道横切关注 点,所以很容易通过建立新的a s p e c t 加入新的功能。另外,当你向系统中加入新 的模块时,已有的a s p e c t 也会自动横切进来。 2 可重用性:可重用性指某个应用系统中的元素被应用到其它系统的能力。 a o p 中的系统模块包括系统组件和影响这些组件的特性,通过将实现基本功能的 组件和特定于应用的系统特性分离,使得组件( 包括类或者函数) 的重用性得到 提高,并使不能封装为类或函数的系统元素( a s p e c t ) 的重用成为可能。举例来说, 你可以用另外一个独立的日志写入a s p e c t 来替换当前的a s p e c t ,用于把日志写入数 据库,以满足不同的日志写入要求。 3 易理解性和易维护性:易理解性和易维护性是影响软件质量的内在因素,它 对软件开发人员和维护人员产生影响。k i c z a l e s 经过统计发现:“如果一个他人写 基于a o p 的m v c 模式研究与应用 的程序有3 7 处需要改动,对于一个最优秀的软件开发人员,也大概只能找到3 5 处u5 j ”。而对于a o p ,对一个a s p e c t 的修改可以通过联结器影响到系统相关的各 个部分,从而大大提高了系统的易维护性。另外,a o p 用最小的耦合处理每个关 注点,使得即使是横切关注点也是模块化的。这样的实现产生的系统,其代码的 冗余小,从而更加容易理解和维护。 2 7a o p 实现技术 目前,在j a v a 世界里实现a o p 功能的工具主要有a s p e c t j 、s p r i n ga o p 、 j b o s s 4 0 、a s p e c t w e r k z 等。虽然a o p 的技术要素从本质上来讲是一致的,但各种 工具的实现方法不同。如图2 7 所示【l6 】为以上几种工具的a o p 语法。 declare j :0 :i _ ;= :j :j ;:o 瞻:? :,? i: 。i e r r o r a m i n 日 : :a n n o t a t i d no r ) c m i :i a v a s b h n g :n 例l o dv a l u e :ji:!iiiii!ii:iiiiii ;0 :i ? 嚣m b :;j := j := = i ;:“$ :j 臻:蘑麓。j : :。7 :,;,:j - :。 图2 7 比较领先的a o p 工具中的语法 f i g 2 7c o m p a r i n gs y n t a xa m o n gt h el e a d i n ga o p t o o l s 1 s ti n c l u s i o nl i s t a o p ) ( m l j b o s s 。a o p xm t s p r i n g c o n f i g x m l 1 a s p e c t j 和a s p e c t w e r k z 在x e r o xp a l oa l t or e s e a r c hl a b 对于面向方面编程进行研究的同时,美国 n o r t h e a s t e r nu n i v e r s i t y 的博士生c r i s t i n al o p e s 和其同事也开始了类似的思考。最 终,美国国防高级技术研究计划署( d e f e n s ea d v a n c e dr e s e a r c hp r o j e c t sa g e n c y 即 d a r p a ) 注意到了这项工作,并提供了科研经费,鼓励将二者的工作成果结合起来。 他们通过定义一套j a v a 语言的扩展系统,是开发者可以方便的进行面向方面的开 发,这套扩展系统被称为a s p e c t j 。之后,a s p e c t j 在2 0 0 2 年被转让给e c l i p s e f o u n d a t i o n ,从而成为在开源社区中a o p 技术的先锋,也是目前最为流行的a o p 工具。 a s p e c t w e r k z 则是基于j a v a 的动态的、轻量级a o p 框架。a s p e c t w e r k z 仍然 是开源社区中的产品,由b e as y s t e m 提供赞助。 豳 第2 章a o p 技术 2 0 0 5 年1 月,a s p e c t j 和a s p e c t w e r k z 结合在一起,发布了a s p e c t j 5 ,它扩展 了a s p e c t j 语言,以支持基于a n n o t a t i o n 开发风格而又支持类似a s p e c t j 代码风格。 a s p e c t j 也为j a v a 5 的语言特性提供了完全的a o p 支持。 a s p e c t j 采用了源代码生成技术来实现a o p t l 7 1 。它提供了一套独立的基于j a v a 平台的a o p 语法,以及专有的a s p e c t j 编译器。编译器在编译具有a s p e c t j 语法 的j a v a 程序时,能够识别诸如a s p e c t ,p o i n t c u t 等特殊关键字,然后利用静态织入 的方式,修改需要被截取的方法所属类的源代码,把a d v i c e 或者i n t r o d u c e 的业务 逻辑代码注入到正确的位置。利用a s p e c t j ,可以将核心关注点完全独立出来,然 后通过a s p e c t j 语法,编写符合核心关注点要求的横切关注点代码,最后通过 a s p e c t j 编译器,将这两者在后期结合起来。采用这种静态织入技术,使得运用了 a o p 技术的系统在运行性能上未受到任何损失,因为它没有利用反射技术或代理 技术,而仅仅是程序的静态扩展而已。然而这种源代码生成方式实现的a o p 虽然 在性能上具备一定的优势,但它同时会给开发带来一定的问题。例如代码的后期 修改会给系统带来不可估量的影响。 2 s p r i n ga o p 作为轻型的f r a m e w o r k ,s p r i n g 在开发轻量级的j 2 e e 时,应用是非常广泛的。 它通过i o c 模式( i n v e r s i o no fc o n t r o l ,控制反转模式) 来实现a o p ,通常被称为 s p r i n ga o p 。在2 0 0 4 年,被作为s p r i n g 框架的扩展而发布。s p r i n ga o p 作为一种 非侵略性的,轻型的a o p 框架,开发者无需使用

温馨提示

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

评论

0/150

提交评论