搬砖方法论:Dependency Inversion Principle(依赖倒置原则、DIP原则)

定义

DIP原则定义中核心的两句描述为如下两条:

  • 高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口(抽象)。
  • 抽象接口(抽象)不应该依赖于具体实现。而具体实现则应该依赖于抽象接口(抽象)。

注:依赖倒置发生在层次结构的系统中。

三条原则

其他原则或者设计模式的解耦手段有很多,DIP的解耦手段就是确定不变,以不变应对需求的多变性,只有不变才是稳定的。
什么是不变?不变就是抽象

  • 代码中多用抽象接口,尽最大可能避免使用具体实现类,且实现类中要一直确定组合优于继承的方式。
  • virtual在设计时就应该是一个没有任何逻辑的空函数。
  • 在抽象设计时,应用Open这类名称代替如OpenInventory含有具体实现细节的名称。

一个小示例

如上图所示的依赖关系,View依赖Manager,Manager依赖Plugin,Plugin依赖View。这种依赖关系有2个问题。

  • 这种依赖迁移性(Transitivity)会造成View也依赖于Plugin
  • 这是一种循环依赖,是设计上非常忌讳的事情。

为了打破这种迁移性和循环依赖,我们添加抽象接口IView,让View和Manager都依赖于IView,这时View和Manager的关系就反转了或者说倒置了。
当然Plugin和View也可以用这种方式进行隔离。对于这种不稳定的依赖(View、数据库、插件等),我们都可以用抽象接口的方式将其隔离,对依赖方向进行反转。


更多文章详见主页:www.aihailan.com

发表评论