Generated with sparks and insights from 18 sources

Introduction

  • 定义: 依赖倒置原则(Dependence Inversion Principle, DIP)是指在设计代码架构时,高层模块不应该依赖底层模块,二者都该依赖于抽象。

  • 核心思想: 面向接口编程,即程序要依赖于抽象接口,不要依赖于具体实现。

  • 好处: 减少类之间的耦合性,提高系统的稳定性,降低并行开发引起的风险。

  • 实现方式: 通过接口传递、构造方法传递和setter方法传递来实现依赖倒置。

  • 应用场景: 适用于需要降低模块间耦合度,提高系统扩展性和维护性的场景。

  • 历史: 由罗伯特·C·马丁提出,并在多篇公开著作中表述,包括《面向对象设计质量标准:对于依赖的分析》和《敏捷软件开发,原则,模式和实践》。

定义 [1]

  • 依赖倒置原则(Dependence Inversion Principle, DIP)是指在设计代码架构时,高层模块不应该依赖底层模块,二者都该依赖于抽象。

  • 高层模块和低层模块都应该依赖于抽象接口,而不是具体实现。

  • 抽象接口不应该依赖于具体实现,而具体实现则应该依赖于抽象接口。

核心思想 [2]

  • 面向接口编程,即程序要依赖于抽象接口,不要依赖于具体实现。

  • 通过抽象接口来定义模块间的依赖关系,降低模块间的耦合度。

  • 抽象接口提供了稳定的依赖关系,而具体实现则可以灵活变化。

好处 [3]

  • 减少类之间的耦合性,提高系统的稳定性。

  • 降低并行开发引起的风险,使得多个开发团队可以独立工作。

  • 提高系统的可维护性和可扩展性,减少修改代码带来的风险。

实现方式 [4]

  • 接口传递: 通过接口来传递依赖关系。

  • 构造方法传递: 通过构造方法来传递依赖关系。

  • setter方法传递: 通过setter方法来传递依赖关系。

  • 在实际编程中,低层模块尽量都要有抽象类或接口。

  • 变量的声明类型尽量是抽象类或接口。

应用场景 [2]

  • 适用于需要降低模块间耦合度的场景。

  • 适用于需要提高系统扩展性和维护性的场景。

  • 适用于多人并行开发的项目,减少开发团队间的依赖。

  • 适用于需要频繁变更底层模块的系统。

  • 在Java应用中,常用于logger框架的选择和切换。

历史 [1]

  • 依赖倒置原则由罗伯特·C·马丁提出。

  • 在多篇公开著作中表述,包括《面向对象设计质量标准:对于依赖的分析》和《敏捷软件开发,原则,模式和实践》。

  • 最早在1996年出现在C++报道中的名为《依赖反转原则》的文章中提出。

  • 被认为是面向对象设计的重要原则之一。

  • 在软件开发中广泛应用,特别是在敏捷开发和TDD开发模式中。

Related Videos

<br><br>

<div class="-md-ext-youtube-widget"> { "title": "Dependency Inversion Principle Explained - SOLID Design ...", "link": "https://www.youtube.com/watch?v=9oHY5TllWaU", "channel": { "name": ""}, "published_date": "Jan 28, 2020", "length": "" }</div>

<div class="-md-ext-youtube-widget"> { "title": "What is Dependency Inversion Principle ?", "link": "https://www.youtube.com/watch?v=8M7pLjacCPI", "channel": { "name": ""}, "published_date": "May 1, 2023", "length": "" }</div>

<div class="-md-ext-youtube-widget"> { "title": "Dependency Inversion Principle Introduction", "link": "https://www.youtube.com/watch?v=5WHKNOTqwsA", "channel": { "name": ""}, "published_date": "Jan 23, 2018", "length": "" }</div>