AOP
AOP(Aspect Oriented Programming,面向切面编程)是一种编程范式,它的目的是通过分离横切关注点(cross-cutting concerns)来提升代码的模块化程度,AOP 的概念最早是由 Xerox PARC 提出的,它并非站在 OOP 的对立面,而是对 OOP 的一个很好的补充。Spring Framework 就是一个例子,它很好地将两者融合在了一起。
横切关注点
简单理解下 AOP 中提到的关注点,其实就是一段特定的功能(或方法),有些关注点出现在多个模块中,就称为横切关注点。举个例子,一个业务系统的很多模块都需要记录操作日志,这是一个能从业务逻辑中分离出来的横切关注点,完全不用交织在每个模块的代码中,可以作为一个单独的模块存在。再举个例子,一个业务系统的很多模块的操作包含隐私数据,都涉及到加解密数据,这也是能从业务逻辑中分离出来的横切关注点,诸如此类。
AOP 解决了什么问题
落实到软件工程其实是为了更好地模块化,不仅仅是为了减少重复代码。通过AOP等机制,我们可以把横跨多个不同模块的代码抽离出来,让模块本身变得更加内聚,业务开发者可以更加专注于业务逻辑本身。从迭代能力上来看,可以通过切面的方式进行修改或者新增功能,这种能力不管是在问题诊断还是产品能力扩展中都非常有用。解决代码混乱问题,核心的业务逻辑代码还必须兼顾其他功能,这就导致不同功能的代码交织在一起,可读性很差;解决代码分散问题,同一个功能的代码分散在多个模块中,不易维护。
AOP 设计层面的概念
AOP 设计层面的概念比较抽象,直观理解起来不太容易,最好在实践中使用下 AOP 就很好理解了,几个重要概念如下,
概念 |