面向对象编程通过设计和语言本身提供的模块化、封装、继承、多态来实现软件复用。尽管OOP在建模以及实现复杂软件方面非常成功,它仍然有一些问题。面向切面编程(AOP)被认为是一项有前途的新技术,它通过对交叉业务的分隔来实现,而这在面向对象编程里很难做到。本文通过一个新的范例介绍AOP的基本概念。
面向对象编程 Object Oriented Programming
今天,面向对象编程已经成为主流的编程模式,在这里,现实问题被分解为一个个的包含数据和行为的对象。
在大型工程实践中,程序员发现在模块中越来越难以分离交叉业务,他们的代码也变得更加难维护。对程序设计的一丝改动都会引发大量不相关模块的改动。
交叉业务 Crosscutting Concerns
一个交叉业务的例子是“日志”,日志在分布式系统中经常被用来记录方法调用,以辅助调试。假设我们在每个函数开始前和结束后都写日志,这会使我们对所有包含方法的类做“横切”(crosscutting)。其他典型的交叉业务包括:上下文敏感的错误处理,性能优化,以及设计模式。
交叉业务可能出现在某些程序中,尤其是那些大型程序中。然而另一方面,对系统的重新设计可以将交叉业务转换成对象。AOP假定交叉业务会出现在程序中,并无法从重构中被剔除出去。
面向切面编程 Aspect Oriented Programming
面向切面的编程AOP是一项新的技术,它将交叉业务分离出来,作为独立单元——切面——处理。切面即是交叉业务的模块化实现,它封装了对各个类都有影响的行为,作为新的可重用的模块。利用AOP,我们可以用OO编程语言(如Java)开始项目,然后我们单独使用切面处理交叉业务。最后,代码和切面一起通过