一、依赖转置原则(DIP:Dependence Inversion Principle)
1、原理
- 高层模块不应该依赖低层模块,二者都应该依赖于抽象
- 抽象不应该依赖于细节,细节应该依赖于抽象
2、层次化
Booch曾经说过:所有结构良好的面向对象软件架构都具有清晰的层析定义,每个层次通过一个定义良好的、受控的接口向外提供了一组内聚的服务。下面给出了一个简单的层次化结构方案,如下:
下面展示的是一个更为合理的方案,每个较高层次都为它所需要的服务声明一个抽象接口,较低的层次实现了这些抽象接口。每个高层类都通过该抽象接口使用下一层,这样高层就不依赖于低层,低层反而依赖于在高层中声明的抽象服务接口,这样就解除了高层对于低层模块的依赖,如下:
2、为什么叫"转置"
转置有下面两层含义
- 依赖关系的转置
- 接口所有权的转置
传统的软件开发方法,比如结构化的分析与设计。倾向于创建一些高层模块依赖低层模块的软件架构。这样的软件架构存在一个很严重的问题,一旦低层模块变动高层模块也会受影响。