原创浅析软件设计方法之面向切面编程_第1页
原创浅析软件设计方法之面向切面编程_第2页
原创浅析软件设计方法之面向切面编程_第3页
全文预览已结束

下载本文档

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

文档简介

1、摘要:随着当今软件的发展,其复杂性越来越高,软件设计变得越来越重要,软件项目中软件重用性加剧,随之模块间的依赖程度也更紧密。软件工程中利用低耦合的基本原则难以明晰的实现。因此,合理的解耦变成了软件设计中一个困难问题。针对此问题,提出面向切面编程(aop)正是其中一种比较实用的解耦方式,阐述面向切面编程方式的产生以及其实现方式,详细说明其实际应用和基本应用。 中国论文网 关键词:软件设计;面向切面编程;aop 中图分类号:tp311文献标识码:a文章编号:1009-3044(2012)03-0595-02 an analysis of aspect oriented programming in

2、 software design deng fang-lin (guangzhou maritime college,guangzhou 510725,china) abstract: as the complexity of software increases nowadays, software design gains more and more importance. with the increasing soft? ware reuse in current software projects, the dependency between different modules d

3、eepens. the fundamental principle of low coupling in software projects is hard to be clearly realized. reasonable decoupling becomes a difficult problem in software design. aspect oriented pro? gramming is one of relatively more practical decoupling methods. key words: software design; aspect orient

4、ed programming; aop 面向切面编程(也叫面向方面),英文简称aop(aspect oriented programming)。是通过预编译方式、代码级扩展或运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。利用aop可以对业务逻辑的各个部分进行横向隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性。 1面向切面编程方式的产生 在开发软件系统中,经常会遇到功能比较单一,在系统中分布广泛但是与具体业务逻辑无关的功能逻辑。例如日志,缓存等功能。这些功能比较独立,和业务逻辑的相关性不高,但系统的各层次都需要对其进行关注。 以往系统开发,更注重把系

5、统纵向分层,相邻的层次间存在单向引用关系,不相邻的层次间相互透明,这是传统oop开发方式带给系统架构方式。但这种开发方式只是将纵向的功能隔离,无法和各层次通用性的功能消除耦合关系,导致通用性的模块维护比较困难,因此引入横向切面的概念,将日志,缓存等这些通用性功能各作为一种横向切面,将需要进行这些功能处理的地方叫做切面关注点,将切面和其关注点的耦合关系剥离出来组成新的模块对切面及其关注点进行编织,这样使业务逻辑的开发人员不必关注于具体的切面逻辑,消除了切面功能和业务逻辑的耦合。这种开发模式就叫做面向切面编程(aop)。 2面向切面编程的实现方式 2.1提取横向切面 一般提取切面的条件:1)功能逻

6、辑相对独立;2)功能逻辑不属于核心业务逻辑;3)功能逻辑在系统中多次使用,通用性较强。 2.2确定切面关注点 业务逻辑中需要调用切面逻辑的地方即为切面关注点。此步骤可以根据业务需求确定使用切面逻辑的相关点。 2.3对切面及其关注点进行代码编织 定义切面逻辑在切面关注点得位置运行。 3面向切面编程的实际应用 下面代码以日志系统为例简单对aop使用进行描述,示例代码为java使用aop之前,原系统需求: /服务层的业务实现类 public class service public void updateuserinfo(user user) /业务逻辑代码实现,此处省略 /添加日志 log.inf

7、o(new date().tostring() +“:“操作”+“service . updateuserinfo ()”); public void setuserdisable(int userid) /业务逻辑代码实现,此处省略 /添加日志 log.info(new date().tostring() +“:“操作”+“service . setuserdisable ()”); service使用 下面使用aop对此进行重构: 1)提取日志切面 切面类 public class logaspect /日志记录方式 public static void log(string method

8、name) log.info(new date().tostring() +“:“操作”+ methodname); 2)切面关注点 这里service类的所有方法都需要日志,所以关注日志切面的点为service类的所有方法。 3)对切面及其关注点进行编织 这里使用java内置的动态代理的方式来实现代码编织 /为service类实现动态代理类servicehandler public class servicehandler implements invocationhandler /要代理的原始对象,这里为service类 private object objoriginal; public

9、 servicehandler (object obj) this.objoriginal = obj ; public object invoke(object proxy, method method, object args) throws throwable object result ; /调用原始对象的方法 result = method.invoke(this.objoriginal ,args); /调用日志切面功能,组装到service类的每个函数调用后 logaspect. log (method.tostring(); return result ; 4)执行调用方法 初

10、始化关注点对象 service service = new service (); invocationhandler handler = new servicehandler (service); service proxy = (service) proxy.newproxyinstance( service.getclass().getclassloader(), service.getclass().getinterfaces(), handler); 具体调用 proxy.省略平台还没有权威的框架支持,也于.net从语言级别不支持动态代理有关。 5结束语 aop作为一种有效的软件设计方式,对原有的软件设计体系是一个有效的补充。它很好地体现了软件设计的基本思想?高聚合,低耦合,为软件设计中相关的问题提供了合理的解决方案。虽然在现有通用的解决方案中还没有将其列为必要的一项,但相信随着软件系统的整体升级,对相关问题日益凸显后,aop终将被人们愈发重视。 参考文献: 1林信良.spring

温馨提示

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

评论

0/150

提交评论