如何提高代码的扩展性(5)

简介: 如何提高代码的扩展性(5)

依赖倒置原则(DIP)例子:


image.png


未进行依赖倒置设计:司机只开一种车


image.png


遵循依赖倒置原则设计:司机可以开多种车


https://blog.csdn.net/yabay2208/article/details/73826719


(5)接口隔离原则


ISP:其一是不应该强行要求客户端依赖于它们不用的接口;其二是类之间的依赖应该建立在最小的接口上面。简单点说,客户端需要什么功能,就提供什么接口,对于客户端不需要的接口不应该强行要求其依赖;类之间的依赖应该建立在最小的接口上面,这里最小的粒度取决于单一职责原则的划分。


如果客户端依赖了它们不需要的接口,那么这些客户端程序就面临不需要的接口变更引起的客户端变更的风险,这样就会增加客户端和接口之间的耦合程度,显然与“高内聚、低耦合”的思想相矛盾。


类之间的依赖应该建立在最小的接口上面。何为最小的接口,即能够满足项目需求的相似功能作为一个接口,这样设计主要就是为了“高内聚”。那么我们如何设计最小的接口呢?那就要说说粒度的划分了,粒度细化的程度取决于我们上一章讲的的单一职责原则里面接口划分的粒度。从这一点来说,接口隔离和单一职责两个原则有一定的相似性。


不同:

(1)单一职责原则更加偏向对业务的约束,接口隔离原则更加偏向设计架构的约束。


(2)从接口的细化程度来说,单一职责原则对接口的划分更加精细,而接口隔离原则注重的是相同功能的接口的隔离。接口隔离里面的最小接口有时可以是多个单一职责的公共接口。


(3)从原则约束的侧重点来说,接口隔离原则更关注的是接口依赖程度的隔离,更加关注接口的“高内聚”;而单一职责原则更加注重的是接口职责的划分。


image.png



相关文章
|
存储
BackTrader 中文文档(十四)(4)
BackTrader 中文文档(十四)
301 0
BackTrader 中文文档(十四)(4)
|
算法 NoSQL Java
服务、服务间接口限流实现
`shigen`是一位坚持更新博客的写手,专注于记录个人成长、分享认知与感动。本文探讨了接口限流的重要性,通过实例分析了在调用第三方API时遇到的“请求过多”问题及其解决方法,包括使用`Thread.sleep()`和`Guava RateLimiter`进行限流控制,以及在分布式环境中利用Redis实现更高效的限流策略。
267 0
服务、服务间接口限流实现
|
JavaScript 关系型数据库 Shell
Linux shell编写技巧之随机取字符串(一)
本文介绍了Linux Shell脚本的编写技巧,包括环境配置、变量命名规则和缩进语法,并提供了一个实例练习,展示如何使用`$RANDOM`变量和`md5sum`命令来生成随机的8位字符串。
349 4
|
存储 安全 Java
Kotlin中的对象类型:全面解析
【8月更文挑战第31天】
269 0
|
前端开发 JavaScript IDE
【Java基础知识3】Java注释:单行、多行、文档注释(如何通过 javadoc 命令生成代码文档、如何在IEDA配置自动为所有的类都添加创建者和创建日期)
【Java基础知识3】Java注释:单行、多行、文档注释(如何通过 javadoc 命令生成代码文档、如何在IEDA配置自动为所有的类都添加创建者和创建日期)
800 0
【Java基础知识3】Java注释:单行、多行、文档注释(如何通过 javadoc 命令生成代码文档、如何在IEDA配置自动为所有的类都添加创建者和创建日期)
|
机器学习/深度学习 存储 人工智能
微博机器学习平台云上最佳实践
本文讲述了微博机器学习平台和深度学习平台的业务功能和云上实践,剖析了阿里云大数据在微博这两大学习平台的架构建设上所起到的作用。
6451 1
微博机器学习平台云上最佳实践
|
存储 编译器 C语言
C++指针与其它复合类型
C++指针与其它复合类型
239 0
|
存储 Linux API
Linux内核30-读写自旋锁
Linux内核30-读写自旋锁
|
SQL 存储 缓存
Django入门-5:模型的基本使用4-模型查询
Django入门-5:模型的基本使用4-模型查询
|
XML Java 数据库连接

热门文章

最新文章