论文部分内容阅读
在复杂的应用系统中,往往存在一组互不关联的对象模块之间有一些共同行为动作需要处理,这些共同的行为动作可被称为“横切关注点(crosscutting concerns)”,其特点是它们都跨越系统的多个核心功能模块,例如日志记录、事务管理、性能优化、错误处理、以及设计模式等。因为这些关注的实现必须穿插在问题领域的代码中去,使得这类关注点的实现要么散乱(Scattering,一个关注点的实现在代码中到处分散)要么杂糅(Tangling,一个软件模块描述对多个关注点的实现)。而这些横切关注点无论是采用面向过程的还是面向对象的编程方式(OOP),都难以用清晰的、模块化的代码实现。 面向切面编程(AOP)能够自动地将这些横切关注点织入到面向对象的软件系统中,从而实现了横切关注点的模块化。切面是AOP的核心,就是把对一个可能横切不同的多个对象的关注点模块化,这些模块化单元就叫“切面”。AOP在帮助我们解决代码散乱和杂糅问题的同时,还有其它一些好处:(1)系统容易扩展。由于切面可以让程序员接触到多个函数的多个接触面,所以在原来的基础上很容易通过加入新的切面来扩展原有的功能。(2)升级容易。使用AOP,设计师可以推迟为将来的需求作决定,实现当前的紧要需求,而把日后更新的需求使用切面与以前的需求耦合起来。(3)更好的代码复用。新的编程技术的最终目的都是为了代码复用,AOP把每个切面实现为独立模块,模块之间的耦合是松散的,更容易理解和维护,代码的冗余也更小,更容易复用。 当然,在对象之间横向联系不很频繁的场合,AOP并不一定比OOP更有优势,甚至有时使用AOP反而不如OOP自然,所以AOP只是OOP在某些应用场合的补充而已。可以说AOP是在实现软件模块之间的松散耦合,从而提高软件的可维护性和可复用性等方面的对OOP的进一步改进。 和欣操作系统中的CAR(component assembly runtime)构件主要由其所定义的接口、构件类和相关元数据组成。基于CAR的AOP机制使用户能够在完全不用修改源代码的情况下简单而方便的动态聚合两个或多个CAR构件类,从而生成一个具有两个或多个CAR构件类所有接口实现的新构件类。实现了动态织入切面代码的AOP技术。