AspectJ在设计模式与方法缓存中的应用
1. 紧密耦合的问题与桥接切面
在软件开发中,组件与容器的紧密耦合是一个常见的问题。一些框架会采用反射和元数据描述文件等技术来解决组件与容器的耦合问题,这类系统在一定程度上也展现出了面向切面编程(AOP)的特性。
紧密耦合存在诸多弊端。例如,若 PersistentObject
的接口需要变更,该变更会波及所有受影响的类。并且,具有持久化特性的 Employee
类无法在不同持久化概念的系统中复用。将持久化功能直接融入 Employee
类还会降低其内聚性。当该类承担的角色较少时,这种影响尚不明显;但随着承担的角色增多, Employee
类将难以有效代表其核心抽象。
为解决这些问题,AspectJ引入了“桥接”切面。以 EmployeePersistence
和 DepartmentPersistence
这两个桥接切面为例,它们实现了 PersistenceProtocol
并使其适配 Employee
和 Department
类。虽然这些桥接切面与行为模式和组件类紧密相关,但这种耦合方式有所不同,它将耦合进行了封装。桥接切面就像组件与模式之间的适配器,角色扮演者和角色定义者无需了解彼此,最终实现了更独立的模块。借助新的桥接切面, PersistenceProtocol
可应用于新系统, Employee