设计原则 | 依赖转置原则

本文介绍了DIP(依赖倒置原则),强调抽象不应依赖细节,高层模块应通过接口调用低层模块。通过层次化结构和接口所有权的转置,降低模块间的耦合,提高软件架构的灵活性和可维护性。

一、依赖转置原则(DIP:Dependence Inversion Principle)

1、原理

抽象不能依赖于具体,具体应该依赖于抽象。核心思想就是要面向接口编程,而不是面向实现编程,具有下面两层含义

  • 高层模块不应该依赖低层模块,二者都应该依赖于抽象
  • 抽象不应该依赖于细节,细节应该依赖于抽象

2、层次化

Booch曾经说过:所有结构良好的面向对象软件架构都具有清晰的层析定义,每个层次通过一个定义良好的、受控的接口向外提供了一组内聚的服务。下面给出了一个简单的层次化结构方案,如下:

在这里插入图片描述

下面展示的是一个更为合理的方案,每个较高层次都为它所需要的服务声明一个抽象接口,较低的层次实现了这些抽象接口。每个高层类都通过该抽象接口使用下一层,这样高层就不依赖于低层,低层反而依赖于在高层中声明的抽象服务接口,这样就解除了高层对于低层模块的依赖,如下:

在这里插入图片描述

3、为什么叫转置

转置有下面两层含义

  • 依赖关系的转置
  • 接口所有权的转置

传统的软件开发方法,比如结构化的分析与设计。倾向于创建一些高层模块依赖低层模块的软件架构。这样的软件架构存在一个很严重的问题,一旦低层模块变动高层模块也会受影响。为了解决高层模块直接依赖低层模块的问题,可以采用上面的优化方案,每个较高的层次都为它需要的服务声明一个抽象接口,较低的层次实现这些抽象接口,这样高层就不依赖于低层,低层反而依赖于在高层中声明的抽象服务接口,这样就转置了原来的依赖关系,变成低层模块依赖高层模块。

通常会认为工具库应该拥有他们自己的接口,但是当使用了DIP时,我们发现往往是客户端拥有抽象接口,而他们的服务者则从这些抽象接口派生,这样就转置了接口的所用权,所有权从服务端转置到客户端。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值