面向方面编程(aspect-oriented programming,AOP)是一种编程范式,旨在提高模块化允许横向关注点的分离。该范式以一种成为方面(Aspect)的语言构造为基础,切面是一种新的模块化机制,用来描述分散在对象、类或函数中的横切关注点(Crosscutting Concern)。
方面的概念源于对面向对象的程序设计的改进,但并不局限于此,它还可以用来改进传统的函数,与侧面相关的编程的概念还包括元对象协议,主题(Subject),混入(Mixin)和委托。
关键词:
- 关注点(Concern):对软件工程有意义的、小的、可管理的、可描述的软件组成部分,一个关注点通常只同一个特定概念或目标相关联。
- 主关注点(Core Concern):一个软件最主要的关注点。
- 关注点分离(Separation of Concerns,SOC):标识、封装和操纵只与特定概念、目标相关联的软件组成部分的能力,即标识、封装和操纵关注点的能力。
- 方法(Method):用来描述、设计、实现一个给定关注点的软件构造单位。
- 横切(Crosscut):两个关注点相互横切,如果实现它们的方法存在交集。
- 支配性分解(Dominant Decomposition):将软件分解成模块的主要方式。传统的程序设计语言是以一种线性的文本来描述软件的,只采用一种方式(比如:类)将软件分解成模块;这导致某些关注点比较好的被捕捉,容易进一步组合、扩展;但还有一些关注点没有被捕捉,弥散在整个软件内部。支配性分解一般是按主关注点进行模块分解的。
- 横切关注点(Crosscutting Concerns):在传统的程序设计语言中,除了主关注点可以被支配性分解方式捕捉以外,还有许多没有被支配性分解方式捕捉到的关注点,这些关注点的实现会弥散在整个软件内部,这时这些关注点同主关注点是横切的。
- 方面(Aspect):在支配性分解的基础上,提供的一种辅助的模块化机制,这种新的模块化机制可以捕捉横切关注点。
从主关注点中分离出横切关注点是面向方面的程序设计的核心概念。分离关注点使得解决特定领域问题的代码从业务逻辑中独立出来,业务逻辑的代码中不再含有针对特定领域问题代码的调用,业务逻辑同特定领域问题的关系通过方面来封装、维护,这样原本分散在在整个应用程序中的变动就可以很好的管理起来。