| 对比 DI | DIP 是设计原则;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 客户端类型
- 替换演练:注入内存实现跑单测,验证核心逻辑与外层解耦
实践中把接口定义在需要它的模块一侧(向内),由外层适配器实现,可避免抽象跟随外部技术变化。