设计模式(8)——SOLID原则之依赖倒置原则

设计模式(7)------SOLID原则之依赖倒置原则

概念

高层次的类不应该依赖于低层次的类。两者都应该依赖于抽象接口。抽象接口不应依赖于具体实现。具体实现应该依赖于抽象接口。

  • 底层次类:实现基础操作的类(如磁盘操作、传输网络数据与操作数据库)。
  • 高层次类:包含负责的业务逻辑以指导底层次类执行特定操作。

使用

当开发新系统时,有时人们习惯先设计底层次类,然后再开发高层此类。一部分人直观认为如果低层次的类没有实现或不确定,就无法确定高层次类能实现哪些东西。如果采用了这种设计思路,那高层次类更有可能会依赖低层次类。

依赖倒置原则建议采用以下方式设计:

  1. 使用业务术语来对高层次类依赖的低层次操作接口进行描述。例如打开报表文件,业务应该调用的是openReport(file),而不是openFile()readBytes()CloseFile()等低层次类中的方法。
  2. 基于上述业务术语抽象的接口创建高层次类,而不是基于低层次类
  3. 低层次实现接口,它们将依赖业务逻辑层,从而完成了依赖倒置

示例

在本例中,高层次的预算报告类(BudgetReport)使用低层次的数据库类(MySQLDatabase)来读取和保存其数据。这意味着低层次类中的任何改变(例如当数据库服务器发布新版本时)都可能会影响到高层次的类,但高层次的类不应关注数据存储的细节。

要解决这个问题,你可以创建一个描述读写操作的高层接口,并让报告类使用该接口代替低层次的类。然后你可以修改或扩展低层次的原始类来实现业务逻辑声明的读写接口。

其结果是原始的依赖关系被倒置:现在低层次的类依赖于高层次的抽象。

相关推荐
用户93816912553606 小时前
Head First 模板方法模式
设计模式
是糖糖啊10 小时前
OpenSpec 完整使用流程笔记 (SDD)
设计模式
程序员Terry2 天前
同事被深拷贝坑了3小时,我教他原型模式的正确打开方式
java·设计模式
刀法如飞2 天前
AI时代,程序员都应该是算法思想工程师
人工智能·设计模式·程序员
在西安放羊的牛油果3 天前
我把 2000 行下单代码,重构成了一套交易前端架构
前端·设计模式·架构
寅时码4 天前
React 正在演变为一场不可逆的赛博瘟疫:AI 投毒、编译器迷信与装死的官方
前端·react.js·设计模式
willow7 天前
Axios由浅入深
设计模式·axios
七月丶9 天前
别再手动凑 PR 了:这个 AI Skill 会按仓库习惯自动建分支、拆提交、提 PR
人工智能·设计模式·程序员
刀法如飞9 天前
从程序员到架构师:6大编程范式全解析与实践对比
设计模式·系统架构·编程范式