首页/开发/代码质量与评审速查/依赖倒置原则 DIP(Dependency Inversion Principle)
设计原则与模式62 条

依赖倒置原则 DIP(Dependency Inversion Principle)

高层策略与低层细节都依赖抽象,抽象不依赖细节(Martin 表述):在架构边界放接口,业务核心不 import 数据库与框架类型,方向感由依赖关系体现。

两条高层不依赖低层;抽象不依赖细节
手段端口(接口)+ 适配器(实现)
收益业务可独立测试与演进

依赖方向示例

依赖方向示例
// 之前:业务层直接 new MySQLOrderRepository()
// 之后
interface OrderRepository { void save(Order o); }
class OrderService {
    OrderService(OrderRepository repo) { ... }
}
依赖注入(DI)是手段、DIP 是原则:用了 DI 框架也可能依赖方向写反(业务依赖具体实现)。

易错点

  • 为每个类都加接口:只有单一实现且无替换需求时可省
  • 接口定义在实现包里:核心仍反向依赖细节

数据来源与参考

  • Robert C. Martin · DIP 论述;Alistair Cockburn 端口-适配器(六边形架构)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌