首页/开发/系统分析与架构设计速查/依赖倒置原则(DIP)
架构风格与模式58 条

依赖倒置原则(DIP)

高层模块与低层模块都依赖抽象;抽象不依赖细节,细节依赖抽象。它约束的是依赖方向,常被与依赖注入(一种实现手段)混为一谈。

对比 DIDIP 是设计原则;DI 是把依赖从外部传入的实现方式
落地标志业务代码不 import 具体框架、数据库驱动或 HTTP 客户端类型
收益核心逻辑可独立测试与替换外部实现

依赖方向示例(Java 风格)

依赖方向示例(Java 风格)
// 业务核心模块:定义接口,不 import 框架类型
interface OrderRepository { Order findById(OrderId id); }

class PlaceOrderService {
    private final OrderRepository repo;      // 构造注入
    PlaceOrderService(OrderRepository repo) { this.repo = repo; }
}

// 外层适配器模块:实现接口,依赖指向业务核心
class MysqlOrderRepository implements OrderRepository { ... }
  • 检查业务包 import:不出现框架、驱动与 HTTP 客户端类型
  • 替换演练:注入内存实现跑单测,验证核心逻辑与外层解耦
实践中把接口定义在需要它的模块一侧(向内),由外层适配器实现,可避免抽象跟随外部技术变化。

易错点

  • 接口按实现类逐方法生成,抽象没有任何业务含义
  • 只把依赖注入容器引入却没有反转依赖方向,框架类型仍遍布业务代码

数据来源与参考

  • Robert C. Martin《Clean Architecture》
  • Martin Fowler bliki《Inversion of Control》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌