(计算机软件与理论专业论文)基于aop的轻量级解耦框架的设计与实现.pdf_第1页
(计算机软件与理论专业论文)基于aop的轻量级解耦框架的设计与实现.pdf_第2页
(计算机软件与理论专业论文)基于aop的轻量级解耦框架的设计与实现.pdf_第3页
(计算机软件与理论专业论文)基于aop的轻量级解耦框架的设计与实现.pdf_第4页
(计算机软件与理论专业论文)基于aop的轻量级解耦框架的设计与实现.pdf_第5页
已阅读5页,还剩57页未读 继续免费阅读

(计算机软件与理论专业论文)基于aop的轻量级解耦框架的设计与实现.pdf.pdf 免费下载

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

文档简介

东北大学硕士学位论文 摘要 基于a o p 的轻量级解耦框架的设计与实现 摘要 通常的软件系统,都会存在例如日志、权限、缓存或者数据访问这样的功能模块, 它们会被系统中多个不相关的业务模块使用,而本身与业务逻辑无关。在软件开发中, d j 于这些基础功能与业务逻辑的混合,给我们带来了许多问题。例如,在软件设计阶 段干扰设计师的设计思路,在软件开发阶段使程序员的代码混乱,在软件维护阶段使 项目难于维护。目前无论使用面向对象( o o p ) j 丕是面向过程的编程方式,都存在这种 问题。有一种新的编程方式面向方面的编程( a o p ) ,可以有效解决上述问题。在 a o p 中,把曰志、权限等称为横切关注点,并作为方面独立开发,在业务系统中设定 连接点,通过将方面编织到连接点完成最终系统。 本文研究的内容是基于a o p 的轻量级解耦框架的设计与实现。本文首先分析了 目前国内外a o p 框架的发展现状,对a o p 的基本概念、a o p 的开发步骤做了深入的 研究。然后针对实际项目开发中遇到的问题,提出了该a o p 框架的功能结构,并对 a o p 的编织技术做了深入研究后,完成了框架的详细设计和实现。我把这个a o p 框 架命名为“m y a o p ”。经过在东软企业解决方案事业部r c f ( r i c hc l i e n tf r a m e w o r k ) 框架中的应用,m y a o p 达到了可运行水平。 m y a o p 是基于a o p 理论开发的,用于解决软件系统中基础功能模块与核心业务 逻辑耦合问题的开发框架,提高了软件复用度。 关键词:面向方面编程;横切关注点:方面:连接点;编织 东北大学硕士学位论文a b s t r a c t t h e d e s i g na n di m p l e m e n t a t i o no fa l i g h t - w e i g h tl o o s e - c o u p l i n gf r a m e w o r k b a s e do i la o p a bs t r a c t t h e r ea r em a n yf u n d a m e n t a lf u n c t i o nm o d u l e si ng e n e r a ls o f t w a r es y s t e m ,s u c ha s l o g g i n g ,a u t h e n t i c a t i o n ,c a c h i n g ,d a t aa c c e s s i n ga n ds oo n t h ec o m l r l o nc o r eo ft h e s e m o d u l e si st h a tt h e yc a i lc r o s sm u l t i p l em o d u l e si nt h es y s t e ma n dm e ya r en o tc o r eb u s i n e s s l o g i co f t h es y s t e m i n t h ed e v e l o p m e n t o f s o f t w a r e ,w e w o u l d h a v e m a n y p r o b l e m sb e c a u s e o fc r o s s c u t t i n gc o n c e r n sa n dc o r em o d u l e sm i x t h e s ep r o b l e m st r o u b l ee i t h e rs y s t e m s t y l i s t so rs o f t w a r ed e v e l o p e r s n e i t h e ro b j e c t - o r i e n t e dp r o g r a m m i n gn o rp r o c e s s o r i e n t e d p r o g r a m m i n gc a nr e s o l v et h e s ep r o b l e m s t h e r ei san e wm e t h o d o l o g y ,a s p e c t o r i e n t e d p r o g r a m m i n g ( a o p ) ,w h i c hc a nr e s o l v et h e s e i na o p ,l o g g i n go rc a c h i n gi st r e a t e da s c r o s s c u t t i n gc o n c e r na n di m p l e m e n t e da sa s p e c ti n d e p e n d e n t l yi na o p a tl a s t ,t h ef i n a l s y s t e mi sc o m p o s e db yt h e s ea s p e c t s t h i sp a p e rd e s c r i b e st h ed e s i g na n di m p l e m e n t a t i o no fal i g h t w e i g h tl o o s e - - c o u p l i n g f r a m e w o r kb a s e do na o p a f t e rt h ea n a l y s i so f d o m e s t i ca n df o r e i g nr e s e a r c hs i t u a t i o n ,w e d i s c u s st h ep r o b l e m sw h i c hw eh a v ei np r a c t i c e ,d e s i g nt h ef u n c t i o ns t r u c t u r eo ft h e f r a m e w o r ka n dr e s e a r c ht h ew e a v et e c h n o l o g yp r o f o u n d l y i nt h ee n d ,id e s i g na n d i m p l e m e n tt h ef r a m e w o r ki nd e t a i l in a l t l et h i sf r a m e w o r kf o r “m y a o p ” m y a o pf r a m e w o r ki sb a s e do na o pt h e o r ya n di s u s e dt or e s o l v et h em o d u l e c o u p l i n gp r o b l e m sb e t w e e nc o r ec o n c e r n sa n dc r o s s c u t t i n gc o n c e r n si ns o f t w a r ed e s i g na n d d e v e l o p m e n t m y a o pf r a m e w o r ki m p r o v e ss o f t w a r er e u s a b i l i t y k e yw o r d s :a o p ;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 n p o i n t ;w e a v e - n l - 独创性声明 本人声明,所呈交的学位论文是在导师的指导下完成的。论文- 中取得 的研究成果除加以标注和致谢的地方外,不包含其他人己经发表或撰:弓过 的研究成果,也不包括本人为获得其他学位而使用过的材料。与我一同l : 作的同志对本研究所做的任何贡献均己在论文中作了明确的说明并表示蜊 意。 学位论文作者签名:饼毳 曰 期:f ,伯 学位论文版权使用授权书 本学位论文作者和指导教师完全了解东北大学有关保留、使用学位论 文的规定:即学校有权保留并向国家有关部门或机构送交论文的复印件和 磁盘,允许论文被查阅和借阅。本人同意东北大学可以将学位沦文的全部 或部分内容编入有关数据库进行检索、交流。 ( 如作者和导师不同意网上交流,请在下方签名;否则视为同意。) 学位论文作者签名: 签字日期: 导师签名: 签字日期: 东北大学硕士学位论文 第一章绪沦 1 1 问题的提出 第一章绪论 2 0 世纪六、七十年代,计算机硬件的飞速发展使得计算机性能迅速提升,高级语 言出现并成为重要开发工具,这使得软件的规模越来越大,复杂性越来越高,以致f 软件危机的到来。但计算机硬件的发展并不是导致软件复杂性增长的根本原因,最多 只能算是催化剂。实际上软件具有固有的复杂性,这是由一些因素决定的,包括问题 域本身的复杂性,项目管理开发过程存在困难和程序状态的复杂性等等。如何处理这 种日益增长着的复杂性一直是困扰软件开发人员的问题之。 好的系统设计师不仅会考虑软件的当前需求,还会考虑到以后可能会有的需求, 以避免到处打补丁。这样就存在一个问题,预知将来是很困难的,如果你漏过了将来 可能会有的需求,你将会需要修改或甚至是重新实现系统的许多部分;从另一个角度 来说,太过于关注不一定需要的需求会导致过分设计( o v e r d e s i g n e d ) 的、难以理解的、 臃肿的系统。所以系统设计师处在这么一个两难局面中:怎么设计算是过分设计? 应 该宁可设计不足还是宁可过分设计? 这使得设计师在设计中进退两难。 举个例子来说,设计师是否应该在系统中包含现在并不需要的日志机制? 如果是 的话,哪里应该写日志? 日志应该记录那些信息? 相似的例子还有关于性能的优化问 题,我们很少能预先知道瓶颈的所在。建立系统中常用的方法是,先建立系统的大致 轮廓,然后优化系统以提高性能,这种方式可能会依照轮廓修改系统的很多部分。此 外,随着时间的流逝,由于使用方式的变化,可能还会产生新的瓶颈,类库设汁师的 任务更困难,因为他很难设想出所有类库的使用方式。 设计师很难顾及到系统可能需要处理的所有关注点,既使是在充分的需求分析河 提下,某些细节问题也不可能考虑周全。软件开发设计面临着设计不足或者过分设汁 的两难局面。 1 2 国内外研究现状 为了让软件的功能更强,并可应用于复杂的环境,现在开发出来的软件更复杂和 庞大,这就带来了一系列的问题。为了提高软件开发能力,在有限的成本下开发出高 质量的软件,从2 0 世纪6 0 年代末以来,人们十分重视软件工程和有效的编程技术。 东北大学硕士学位论文 第一章姥论 为了使系统具有商可靠性、可扩展性、可复用性、可配置性,已经提出了很多开发方 法,如用形式化方法进行需求说明、基于组件技术、面向对象开发方法等。这蝼开发 方法极大地提高了软件的质量和大大缩短了开发周期。 许多年前。很多理论学家就认为创建可管理系统的最好方法就是分离系统中的关 注点。d a v i dp a r n a s 在1 9 7 2 年的论文中提出实现“s e p a r a t i o no f c o n c e r n s ”f s o c ) 最好 的方式就是使用模块化创建模块以实现相互隐藏的过程。然而,砸向对象技术并 没有彻底解决软件开发中的维护、复用等问题。在面向对象世界罩,软件被划分为多 个离散的类,每个类担任一个角色,以此来实现软件系统角色的划分。但是类与类之 间的关系通常是错综复杂的,面向对象只通过继承表达了纵向的联系,丽类与类之间 横向的联系是其所忽略的,结果导致类之间的一些共同属性散乱分布在备个类的代码 中。从角色划分角度来说,类由于承担了多个角色而导致代码混乱,结果使得封装不 严密,划分的角色也不清晰,这显然与面向对象思想相违背:而且从软件的维护和复 用的角度来考虑,这样的设计将给维护和复用带来沉重的负担。此外,面向对象在大 型系统、分布式系统和灵活性要求较高的系统中也存在很多局限。许多方法学产 生式编程、元编程、反射编程、分级过滤、可适配编程、面向主体的编程、面向方觚 的编程( a o p ) 和意图编程都曾经用来解决模块化横切关注点的问题。在这些方法 中,a o p 是最流行的i l l 。 为了解决这些问题,2 0 世纪9 0 年代早期美国硅谷x e r o xp a l oa l t or e s e a r c h c e n t e r ( p a r c ) 研究中心首席科学家g r e g o rk i c z a l e s ( j 前是加拿大不歹0 颠一哥伦比亚火 学计算机科学教授) 带领的研究小组先后尝试了反射( r e f l e c t i o n ) 和元对象协议 ( m e t a o b j e c tp r o t o c 0 1 ) 等多种技术,但这些技术非常复杂,难以被广泛利用。摄终, g r e g o r k i c z a l e s 等抓住了问题的要害:“横切”。并在1 9 9 7 年欧洲面向对象程序设计 大会( e c o o p9 7 ) 提出了面向方面的程序设计:a s p e c t o r i e n t e dp r o g r a m m i n gf a o p ) 。其 目的是让程序员能够在自己的代码中将“横切结构”模块化,这就是a o p 的起源。 1 9 9 7 年,p a r c 开始开发a s p e e j ( a o p 在j a v a 语言基础上的扩展) ,1 9 9 8 年首次对外 公布,2 0 0 1 年发布1 0 版本。随即a s p e c t c + + ,a s p e e t c # 等等都相继涌现。a o p 作 为种新的程序设计范型体现出了强大的生命力,而且可能才刚刚开始。 a o p 就诞生于这样的应用背景,它不是o o p 的替代品,丽是对o o p 的进步补 充和完善,两者相辅相成。在某些场合下,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 来模块化软件中的横切关 2 东北大学硕士学位论文 注点( 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 d e c t 实现模块化管理,从丽降低了类与类之间的耦合度,增强了类的内聚度,使软件更易 于维护、复用和扩展,使系统构架更为灵活、轻便。 a s p e c t j 是a o p 的一个实现,就像j a v a 和s m a l l t a l k 是o o p 的实现一样。a s p e c t j 是基于j a v a 语言的,a o p 中也有基于其他语言的实现,例如a s p e c t c 就是基于c 语 言的,而p y t h i u s 就是基三于p y t h o n 的。而且,基于j a v a 语言的a o p 实现也不仅仅 是a s p e c t j ,例如,a o p s y s 的j a v aa s p e c tc o m p o n e n t0 a c ) 也是基于j a v a 的a o p + 实 现。这些a o p 实现在方面的表达和最终系统的组装方式上都各不相同。 1 3 我们的研究内容 基于上面提出的问题及露前国内外的研究状况,我们的研究是设计一种基于a o p 的框架解决软件开发中关注点耦合问题。在实际项目开发中,将系统中的横切芙 二点 与业务逻辑分离并独立实现,框架的作用就是将横切关注点与核心业务逻辑艇合,完 成最终系统。首先,我们要对目前已有的基于j a v a 的a o p 框架进行系统地研究,找 到其中的优势与不足:然后,结合现有的技术设计开发新的a o p 框架。由于本课题 是基于a o p 的设计与开发,所以要对a o p 这种新的开发方式做比较具体的研究,包 括a o p 的历史,a o p 的理论,a o p 的基本概念以及a o p 的实现机制等等。 但是仅仅有这些还是不够的,我们的最终目的还要从实际出发解决模块耦合问题。 就像o o p 一样,虽然理论上都是一样,但是对于不同编程语言来说,还是存在或多 或少的差异。a o p 也是如此,我们的研究内容限定在j a v a 语言。为什么会选择j a v a 语言呢? j a v a 语言是当今计算机世界发展最快速的语言之一,短短的十年闻,已经在 编程语言上占据了举足轻重的地位,大到企业级的应用开发,小到手机等移动存储设 备都留有j a v a 的足迹。设计和实现j a v a 语言的a o p 框架,非常具有理论和实践意义。 除此之外,对于目前软件开发模式也要进行一定的研究,用实际应用来检验研究 内容的可行性和可用性,使我们在研究中有的放矢。 1 4 论文结构安排 本文共分六章。第一章绪论部分指出当前软件开发中遇到的问题,并提出解决方i 案。第二章研究基础,主要介绍a o p 的理论和涉及到的关键词,除此之外对o o p 和 东北大学硕士学位论文第一章绪论 当前软件开发模式做简单的概述。第三章是总体结构设计,首先对目前已经存在的系 统做必要的分析,得出需要解决的问题;然后提出使用a o p 后我们的解决方案;最 后设计框架的基本功能。第四章是对a o p 语言编织技术的研究,包括编织时机和实 现机制等。第五章是框架的详缅设计和具体实现部分以及简单的应用。第六章是本课 题的展望与总结部分,包括使用a o p 后带来的问题,对本次工作的总结和以后需饕 研究的问题。 4 东北大学硕士学位论文 第二章研究基础 第二章研究基础 本章主要是一些基础性的介绍,包括o o p 的产生与发展,a o p 的基本概念以及 发展现状,还有目前的软件体系结构等。 2 1o o p 概述 面向对象程序设计简称o o p ,是o b j e c t - o r i e n t e dp r o g r a m m i n g 的缩写。随着软件 业的发展,软件的规模越来越大,导致软件的生产、调试、维护越来越困难,因而发 生了软件危机。人们期待着一种效率更高,更加容易理解,更加符合人类思维划惯的 程序设计语言,o o p 就是在这种情况下应运而生的。从2 0 世纪6 0 年代提出面向对蒙 的概念,到现在已发展成为一种比较成熟的编程思想,并且逐步成为目前软件开发领 域的主流技术。同时,它不仅局限于程序设计方面,已经成为软件开发领域的一种方 法论。 2 i 1o o p 的基本概念 面向对象技术是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设 计技术。它以数据为中心丽不是以功能为中心来描述系统,数据相对于功能两言具有 更强的稳定性。它将数据和对数据的操作封装在一起,作为一个整体来处理,采用数 据抽象和信息隐蔽技术,将这个整体抽象成一种新的数据类型弓廷,并且考虑不同类 之间的联系和类的重用性。类的集成度越商,就越适合大型应用程序的开发。另一一方 面,面向对象程序的控制流程由运行时各种事件的实际发生来触发,丽不再由颓定顺 序来决定,更符合实际。事件驱动程序执行围绕消息的产生与处理,靠消息循环机制 来实现。更重要的是,可以利用不断扩充的框架产品m f c ( m i e r o s o f tf o u n d a t i o n c l a s s e s ) ,在实际编程时可以采用搭积木的方式来组织程序,站在“巨人”肩上实现自 己的愿望。面向对象的程序设计方法使得程序结构清晰、简单,提高了代码的重用性, 有效地减少了程序的维护量,提高了软件的开发效率。 对象与类是面向对象方法中的两个基本概念。客观世界中实体的抽象构成对象, 任何事物都可以作为一个对象,如一个人、一辆汽车、一个窗l 、一个按钮、 一鹰建 筑、一项贷款等等。对象的划分和定义是灵活的,视需要而定。具有相同属性和行为 的一个或多个对象的集合成为一类。类有层次之别,类下可以有子类,类上可以有父 5 东北大学硕士学位论文 第二章研究基础 类。如:人可分为男人和女人,男人又可以分为儿童、青年、成年、老年等等。类是 对象的抽象,对象是类的实例。类的划分也是灵活的,依需要而定。 2 1 2o o p 的基本特征 面向对象技术强调在软件开发过程中面向客观世界或问题领域中的事物+ 采用人 类在认识客观世界过程中普遍运用的思维方法,直观、自然地描述客观世界中的有关 事物。面向对象技术的基本特征主要有封装性、继承性和多态性。 ( 1 ) 封装性:对象是相对独立的单元,与之相关的数据和操作被封装在内部,对外 是不可见的。封装的信息隐蔽作用反映了事物的相对独立性,可以只关心它对外所提 供的接口,而不注意其内部如何提供这些服务。对象和对象之间通过信息交换进行联 系。封装有两个含义:一是把对象的全部属性和行为结合在一起,形成一个不可分割 的独立单位,对象的属性值( 除了公有的属性僮) 只能由这个对象的行为来读取和修改; 二是尽可能隐蔽对象的内部细节,对外形成一道屏障,与外部的联系只能通过外部接 口实现。 ( 2 ) 继承性:每个类都可以从它的父类中继承共性。封装机制将对象的使用者与设 计者分开,使用者不必知道对象行为实现的细节,只需要用设计者提供的外部接口让 对象去做。继承允许和鼓励类的重用,提供了一种明确表述共性的方法。个特殊类 既有自己新定义的属性和行为,又有继承下来的属性和行为。尽管继承下来的属性和 行为是隐式的,但无论在概念上还是在实际效果上,都是这个类的属性和行为。当这 个特殊类又被它更下层的特殊类继承时,它继承来的和自己定义的属性和行为又被下 层的特殊类继承下去。因此,继承是传递的,体现了大自然中特殊与一般的关系。 ( 3 ) 多态牲:是指类中同一函数名对应多个具有相似功能的不同函数,可以使用相 同的调用方式来调用这些具有不同功能的同名函数。继承性和多态性的结合,可| 丛生 成系列类似但独一无二的对象。由于继承性,这些对象共享许多相似的特征;由于 多态性,针对相同的消息,不同对象可以有独特的表现方式,实现特性化的设计。 2 2a o p 概述 在计算机科学的早期阶段,开发人员直接使用机器代码来编程,不幸的是,程序 员得花费更多时间来考虑一种特定机器的指令集而不是手中需要解决的问题本身。慢 慢的我们转而使用允许对底层机器做某种抽象的高级语言,结构化语言使得我们可以 把问题分解成一些必要的过程来完成任务。但是,随蓑复杂程度的增加,我们又需要 1 6 东北大学硕士学位论文 第二章研究基础 更适合的技术。面向对象的编程方式( o o p ) 使我们可以把系统看作是一批相互合作的 对象。类允许我们把实现细节隐藏在接口下。多态性为相关概念提供公共的行为和接 口,并允许特定的对象在无需知道基础实现的前提下改变特定行为。 编程方法和语言决定了我们和计算机交流的方式。每种新的方法学都提出种 新的分解问题的方法:机器码、伪代码、过程和类等。每种新的方法学都使得从系统 需求到编程概念的映射更加自然。编程方法学的发展让我们可以建立更加复杂的系统, 这句话反过来说也对,我们能够建立更加复杂的系统是因为这些技术允许我们处理这 种复杂度。 现在,大多数软件项目都选择o o p 的编程方式。确实,o o p 已经表明了它处理 一般行为的能力,但是我们一会儿会看到( 或许你已经感觉到了) ,o o p 不能很好的处 理横越多个经常是不相关的业务模块的行为,相比之下,a o p 填补了这个空白,它很 可能会是编程方法学发展的下一个里程碑吲。 2 2 1a o p 的基本概念 在研究开始之前,我们有必要了解一下a o p 技术。a o p 是建立在o o p 和过桴编 程这些已经存在的方法学上的,它是对模块化横切关注在概念和结构上的增强。使用 a o p ,业务逻辑你仍然能够使用基本的方法学来实现。例如,如果o o p 是基本的方 法学,你能够把业务逻辑实现为类。方面( a s p e c t ) 在系统中被封装成横切关注点,它们 保证把系统中的不同模块编织到一起形成最终的系统1 2 】。 a o p 与o o p 最本质的不同是在管理横切关注点上。在a o p 中,每一个关注点的 实现被忽略成可引导进的横切行为【3 l 。举例说明,一个业务逻辑模块本身是不知道它 的操作是具有日志和权限功能的。所以使用a o p 的结果,是使每一个单独关注点的 实现被孤立的引导到系统中。接下来我们研究一下a o p 中的几个重要的基本概念1 3 , 其中许多的术语都是来自a o p 的早期项目a s p e e u 中。 ( 1 ) 关注点( c o n c e r n ) = 一个关注点就是一个实际闯题、概念或者一个应用程序感兴 趣的区域。例如:安全性检查反映了安全性关注点;事务管理或者性能监控是一般的 关注点。 ( 2 ) 横切关注点( c r o s s - c u t t i n gc o n c e r t i ) , * 横跨多个类的关注点,例如安全性检查就是 一个横切关注点。在o o p 中横切通常是混乱的。 ( 3 ) 方面( a s p e c t ) :一个方面就是一个横切关注点的模块化,把分散的代码聚集到一 起形成一个特定的模块。 东北走学硕士学位论文 第二章研究基础 ( 4 ) 连接点o o i n p 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 ) 和异常抛出。 ( 5 ) 通知( a d v i c e ) :是在特定切入点的执行动作。通知相对于连接点的位罨有三种类 型:b e f o r e ,a f t e r 和a r o u n d 。使用a r o u n d 类型的通知可以修改连接点的执行代码,它 可以代替执行点代码也可直接跳过。许多a o p 框架模鍪! 把通知看成是拦截器,肖程 序运行到切入点时,某个对象就会接收到个回调,也就是触发了一个拦截器。例如: 在执行到切入点之前的安全认证和方法切入点之前开始事务和结束后的事务提交等。 ( 6 ) 切点集合( p o i n t c u t ) :是切入点的集合,定义拦截器的触发时机。切点集合通常 使用正则表达式或者其他的通配符来描述。一些a o p 技术还支持切点集合的组合。 ( 7 ) 导言( i n t r o d u c t i o n ) , 是添加方法或域到已经存在的类或接| 中。使用导言可以 解决j a v a 中的多重继承。 ( 8 ) 混合继承( m i x i ni n h e r i t a n c e ) :是指一个类除了实现它的基本类型( p r i m a r yt y p e ) 之外,还可以实现这个混合类型,以表明它提供了某些可选择的行为。 ( 9 ) 编织( w e a v e ) 组装方面到完整的执行流或者类中。 2 2 2a o p 的优点 a o p 可帮助我们解决上面提到的代码混乱和代码分散所带来的问题,它还有一些 别的好处1 4 j : ( 1 ) 模块化横切关注点:a o p 用最小的耦合处理每个关注点,既使是横切关注点也 是模块化的。这样实现产生的系统,其代码的冗余度小。模块化的实现还使得系统容 易理解和维护 ( 2 ) 系统容易扩展:由于方面模块根本不知道横切关注点,所以很容易通过建立新 的方面加入新的功能。另外,当往系统中加入新模块时,通过配黄,已有的方面能够 自动横切进来,使系统易于扩展。 ( 3 ) 设计延迟绑定:使用a o p ,设计师可以推迟为将来的需求作决定,因为它可以 把这种需求作为独立的方面很容易的实现。 ( 4 ) 更好的代码重用性:由于a o p 把每个方面实现为独立的模块,模块之间是松 散耦合的。举例来说,你可以用另外一个独立的日志写入方面替换当前的同志写入方 面( 将写入文本改为写入数据库) ,以满足不同的日志写入要求。 总体来说,松散耦合的实现意味着更好的代码重用性。a o p 在实现松散耦合e 是 对o o p 的补充。 8 东北大学硕士学位论文 第二章研究基础 2 2 3a o p 的发展现状 新的面向方面编程( a o p ) 利用模块化解决上面的问题。在a o p 中,一个关注点就 是一个特定的目的、一块我们感兴趣的的区域。从技术的角度来说,一个媳型的软件 系统包含一些核心的关注点和系统级的关注点。举个例子来说,一个信用卡处理系统 的核心关注点是借贷存入处理,而系统级的关注点则是日志、事务完整性、授权、安 全性及性能问题等,我们称这些系统级的关注点为横切关注点。所以上面的问题就转 化为在软件开发中我们如何有效地分离系统中的横切关注点? a o p 从其本质上讲,r 叮 以用一种松散耦合的方式来实现独立的关注点,然后,组合这些实现来建立最终系统。 用它所建立的系统是使用松散耦合的、模块化实现的横切关注点来搭建的。 ( 1 ) 我们首先对目前已有的国内夕 a o p 框架作大致的介绍。 o a s p e c o :最完整的a o p 实现就是a s p e c t , l 1 。它把a o p 作为语言结构中的一等 公民。它是对j a v a 语言的扩展并且使用自身的编译器。不像其他使用标准j a v a 和在 x m l 文件中定义连接点的a o p 框架,a s p e c t j 整体都使用j a v a a s p e c t 代码而并非元 数据。这样实现的好处是在某些方面是类型安全的。可是a s p e c t 也存在许多缺陷: a s p e c t 语法过于复杂而且不容易理解。相比其他的a o p 框架,学习曲线太长。 ( 墓) a s p e c t w e r k z :a s p e “e r 娩【3 】是一个纯j a v a 的a o p 框架,他在x m l 配置文件 中定义连接点。与a s p e c t 不同的是,a s p e c t w e r k z 支持“每个m ”,“每个c l a s s ”, 和“每个线程”的通知。a s p e c t w e r k z 与a s p e c t 一样也支持三种类型的通知,分别是 b e f o r e ,a f t e r 和a r o u n d 。他还支持异常,常规表达和控制流通知。丽且a s p e c t w e r k z 还提供在运行时添加和移除通知的功能。 ( 9 j b o s sa o p :j b o s s 4 把a o p 作为他应用服务器的核心功能扣j 。j b o s s 的目的不 仅是提供一个a o p 框架,其本质目的是为了简化企业级服务的应用。j b o s s 提出了 个明确的目标就是把企业级服务应用到p o j o ( p l a i no l dj a v ao b j e c t ) 上。j b o s s 框架本 身,就像a s p e c t w e r k z ,是基于类装载器控制的。j b o s s 是一个相当完善的a o p 框架, 它的强大包括:支持方法,字段和构造函数的拦截和通知。因为j b o s s 使用自定义的 a o p 类装载器,对象实例能够自动被通知而不是在构造时被通知。僵j b o s sa o p 也育 许多不足之处:使用j b o s sa o p 的前提是需要把j b o s sa o p 框架同j b o s s 应用服务器 绑定,这就破坏了j 2 e e 的移植性问题。而且j b o s s 中x m l 的定义过于复杂。 s p r i n g a o p :就像j b o s s 一样,s p r i n g 提供的切面也是可分离的,足由a o p 框 架来实现的【7 1 。s p r i n g 把a o p 整合到s p r i n g 的轻量级容器中,而且把a o p 同s p r i n g 的服务联系起来。这样可以不使用s p r i n gb e a n 工厂或者应用上下文也能够使用s p r i n g 东北大学硕士学位论文 第二章研究基础 的a o p 。s p r i n ga o p 有很多优点:其a o p 框架同s p r i n gi o c 容器整合,如果你在构 建应用的时候使用了s p r i n g ,那么s p r i n ga o p 可以很容易的添加进来。而且所有的 s p r i n g 方法都是普通j a v a b e a n ,都可以在轻量级容器中配置。s p r i n g 最大的缺点也是 由于a o p 框架间s p r i n gi o c 容器整合,如果以前的应用没有使用s p r i n g 框架,那么 添加s p r i n ga o p 将会非常困难。 ( 2 ) 下面我们具体结合a o p 中的每种基本概念,对各个框架进行系统比较酆。如表 2 1 所示。 表2 1a o p 框架比较 t a b l e2 1c o m p a r i s o no f a o pf r a m e w o r k 连接点上 连接点匹配连接点组合通知类型实例化扩展性 下文 b e f o r e , v i i i ,t a r g e t , s i g n a t u r e , a b s t r a c t a s p e c t ja f t e r ,a f t e rt h i s ,t a r g e t , 1 1 3 s t a l i c e , t y p e ,p a t t e r n , p o i n t e u t s r e t u r n i n g ,a r g s ,( a l l c r o w b e l o w s u b t y p e s , a f t e r s t a t i c a l l yv m ,c l a s s , a s p e c t w i l dc a r d , l h l o w i 略t y p e d ) i n s t a n c e w e r k za n n o t a t i o n ,i i ,! a r o u n d t h r e a d s l g n a t u r e , v m c l a s s , j b o s si n s t a t n e e o v e r r i d i n g , a r o u n d i n s t a n c e , a o pw i l dc a r d a d v i e e v l a j o i n p o i n t a n n o t a t i o n b i n d i n g r e f l e c t i v e b e f o r e a f t e r a c c e s s s p r i n gr e g u l a rr e t u r n i n g , c l a s s & 戤l a o p e x p r e s s i o n a r o u l l d i 1 1 s t a t n e e t h r o w s 连接点匹配:a s p e e t j 、a s p e e t w e r k z 和j b o s sa o p 提供了类似的类型模式支持。 它们三个都允许签名方面的匹配,对于j a v a5 应用程序来说,这些匹配包括注释和泛 型。a s p e c t j 和a s p e c t w e r k z 提供了一种简洁的引用多个类型的技术( 例如a c c o u n t + 表示帐户的所有子类型) 。所有的工具都支持通配符匹配。s p r i n ga o p 还提供了对j e 则表达式的支持。虽然这看起来可能是一个强大的优势,但还是要指出其他技术已经 选择了放弃正则表达式,好让连接点读起来不是太难,同时不会存在潜在的损害。连 1 0 i 东北大学硕士学位论丈 第二章研究基础 接点复合操作符基本上都是相同的。s 耐n ga o p 不提供“非”操作,这个操作通常t j 没有s p n n ga o p 连接点模型的容器( c o n t a i n e r ) 连接点结合使用。 通知形式:a s p e e t j 支持比其他技术更多的通知形式,而j b o s sa o p 只支持种 通知形式。每种通知形式都可以表达成a r o u n d 通知,所以j b o s s 的技术是无限的,而 且它确实提供了额外的简单性。不好的一面是它损失了简洁性,这点可以从需要进 行额外的调用才能继续执行原来的方法调用。 连接点上下文:在a s p e c t j 和a s p e e t w e r k z 中,通过指定和绑定连接点参数动 态访问连接点的状态,类似于在j a v a 语言中声明方法参数的技术。这为连接点上下丈 提供了静态类型化的好处。j b o s s a o p 和s p r i n ga o p 反射性地访问连接点的状态,这 消除了在连接点表达式中参数绑定的复杂性,代价是参数静态类型化。j a v a 程序员j 惯了方法参数静态类型化带来的好处,同时还可以从连接点参数的静态类型化得到b 0 样的好处。所以,在j b o s sa o p 最近的发行版本中,有提供静态类型化的“a r g s ”的 计划。 实例化:在所有的工具中,方面的实例化是由p e r 予旬控制的f 2 4 】。曰三如所利, s p r i n g a o p 的实例化模型更简单。对于额外的实例化机制的支持,则意味蕾可以把方 面编写成只能应用于特定的动态上下文环境中,不用编写代码保存这个上下文并测试 其他方面是否该应用这个方面。主要的区剐因素是a s p e c d 支持在每个控制流程进行 方丽初始化,a s p e c t w e r k z 支持每个线程的初始化,而j b o s s 则支持每个连接点的初 始化。哪种最有用则取决于具体的需求。 扩展性:方面的扩展性支持方面库的部署,这样可以在日厝为特定程序丽将这 些方面库具体化。例如,一个方面库可以提供应用程序监视需要的全部逻辑和基础设 施。但是,要采用某个特定项目的库,那么库使用的连接点必须扩展成应用程序特定 的连接点。a s p e c t j 用抽象方两支持扩展性,抽象方面包含抽象的切入点和具体的通知。 扩展抽象方面的二f 方面必须具体化连接点。a s p e c t w e r k z 和j b o s sa o p 使用了完全小 同的技术,没有使用抽象连接点机制。扩展是通过生成方面的子类、并在x m l 中或 通过注释定义新的通知绑定而实现的。连接点到通知的显式绑定为a s p e c t w e r k z 翻 j b o s sa o p 提供了显著优势,从而可以很容易地把方面扩展到新系统,无需要生成了 类。方面库的使用数据正在日益增多,与其他使用的j a v a 风格的继承和连接点绑定技 术相比,这些将决定a s p e e t l 这个特殊的a o p 继承形式是更好还是更差。 东北大学硕士学位论文 第= 章研究基础 2 3 软件体系结构概述 企业应用系统中软件成分越来越复杂, 和性能需求混杂。软件系统结构异常复杂。 系统规模越柬越大,导致应用的功能需求 在开发系统时,首先关注的是如何构架软 件系统的体系结构,从整体上满足软件系统的所有需求,而不是针对系统某项需求。 软件体系结构是指计算软件( 程序) 系统的一个或多个系统结构,它由组成系统的构件、 构件的外在表现属性和构件之间的关系构成,它提供了一种使软件开发活动可被管理、 形式化、可组织的一种工其,通过它可以把软件开发过程中的一些物件转化成新的软 件体系结构下的物件。 软件体系结构很多,从体系结构中构件类型集合、构件运行时的拓朴结构逻辑集 合、限制条件的语义集合和构件连接器集合四点考虑,将软件体系结构分为垭樊:以 数据为中心的体系结构、数据流体系结构、虚拟机体系结构、调用和返回体系结构和 独立构件体系结构等 2 9 1 。近几年面向对象的设计方法的成熟和推广,推动了构件技术 的发展和w e b 技术应用的成熟。软件系统设计大多把一个软件系统分为多个层次, 上层的逻辑不需要了解所有的底层逻辑,它只需要了解和它邻按的那一层的细节。这 种方法是c s 的扩展,纵向采用虚拟机的软件体系结构,下层结构是为上层结构提供 服务的虚拟机,在每一层上则是采用独立构件体系结构,把不同的功能和服务封装成 为一个个独立的过程或对象,它们之间通过消息通讯,实现各计算单元解耦,使系统 具有可修改性。经典的分层的软件体系结构将软件系统划分为三个层次:表示层、领 域逻辑层和数据层【9 】。 在实际系统设计实践中,采用不同的技术路线,系统的层结构也会有所不同,例 如,微软公司的n e t 技术体系中,把系统结构分为四个层次:用户层、表示层、业务 层、数据访问层。在j 2 e e 技术体系中,三层结构演变为五层结构:用户层、w e b 层、 业务层、集成层和资源层【l o l 。 1 2 东北大学硕士学位论文 第三章框架的总体结构设计 第三章m y a o p 的总体结构设计 本章首先结合实例对目前软件开发的状况作大体的分析,寻找出问题的所在。然 后针对a o p 这种新的语言作具体的剖析,找出解决问题的方法。最后,对我们要没 计的框架提出总体功能需求和结构设计。 3 1 对目前软件开发状况的分析 一般软件系统中都包含数据存储、日志、权限、安全和缓存等基础功能,这螬耩 础功能是与业务逻辑不同的,也是相独立的。比如在财务系统丌发中,我们需要确数 据存储、习志、权限等,在客户关系系统( c r m ) q b 我们同样也需要。在项闩中,这齄 基础功能模块会被不同的业务模块使用

温馨提示

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

评论

0/150

提交评论