Skip to content

依赖倒置原则

定义

依赖倒置原则(Dependency Inversion Principle, DIP) 由 Robert C. Martin 在 SOLID 设计原则中提出,其英文原文定义为:

“High-level modules should not depend on low-level modules. Both should depend on abstractions. Abstractions should not depend on details. Details should depend on abstractions.”

即,高层模块不应依赖低层模块,两者都应依赖抽象;抽象不应依赖具体实现,具体实现应依赖抽象。

核心思想

通过依赖抽象(接口或抽象类) 而非具体实现,反转传统的依赖方向(高层直接依赖低层),从而解耦模块间的直接关联。例如,业务逻辑层(高层)不应直接依赖数据库操作类(低层),而是通过数据访问接口(抽象)间接协作。

核心作用:

  • 降低耦合:模块间通过抽象交互,替换底层实现(如切换数据库、日志框架)时无需修改高层代码。
  • 增强可测试性:通过 Mock 抽象接口,实现单元测试的隔离性。
  • 提升扩展性:新增功能只需扩展抽象接口的实现,符合开闭原则(OCP)。

典型实现方式:

  • 依赖注入(Dependency Injection):通过构造函数或 Setter 注入抽象依赖。
  • 依赖查找(Dependency Lookup):从容器中获取抽象实例(如 Spring 框架)。

通过遵循 DIP,系统架构可灵活应对变化,同时促进模块的独立开发和复用,是构建松耦合、高内聚系统的核心实践。