知识卡片
依赖注入的本质:抽象+依赖外推+注入
内容
依赖注入原名“控制反转(IoC)”,Fowler 探明工作原理后取了更能体现特点的名字。其关键在于抽象、依赖外推,最后再通过某种机制注入依赖,从而解除调用者与被调用者的耦合。下订单例:SyncInsertingOrderStrategy 把对 TransactionScope 的具体依赖往外推给 PlacingOrderService,PlacingOrderService 又把对 InsertingOrderStrategy 的具体依赖往外推给调用者;到底用哪种策略/事务类型与提供服务行为的类无关,选择权交给最终调用者(可用 Spring 注解/配置完成注入)。发散:DI 框架只是“注入机制”,真正解耦靠的是前两步(面向抽象编程 + 把具体依赖层层外推);没有前两步,光加 @Autowired 并不会解耦。
参考来源
- 位置:《解构领域驱动设计》附录A A.2.2(源文件:_epub-src/OEBPS/034.xhtml)
- 结论依据:原文说明依赖注入的由来与三要素,并以下订单策略/事务外推为例。
- 原始内容:依赖注入解除了调用者与被调用者之间的耦合,其中的关键在于抽象和依赖外推,最后再通过某种机制注入依赖。