设计原则(五):ISP 接口隔离原则

简介: 设计原则(五):ISP 接口隔离原则

背景介绍


这是我的《架构整洁之道》系列的第九篇,这一篇我们将一起学习 ISP 接口隔离原则~

《架构整洁之道》系列:



ISP 接口隔离原则


我们先一起看下图的这种软件结构:


网络异常,图片无法展示
|


有多个用户需要操作 OPS 类。现在,我们假设这里的 User1 只需要使用 op1, User2 只需要使 op2, User3 只需要使用 op3。


很明显,User1 虽然不需要调用 op2、op3,但在源代码层次上也与它们形成依赖关系。这种依赖、意味着我们对 OPS 代码中 op2 所做的任何修改,即使不会影响到 User1 的功能,也会导致它需要被重新编译和部署。


这个问题可以通过将不同的操作隔离成接口来解决:


网络异常,图片无法展示
|


现在 User1 的源代码会依赖于 U1Ops 和 op1,但不会依赖于 OPS。这样一来,我们之后对 OPS 做的修改只要不影响到 User1 的功能,就不需要重新编译和部署 User1 了。

在一般情况下,任何层次的软件设计如果依赖于不需要的东西,都会是有害的。从源代码层次来说,这样的依赖关系会导致不必要的重新编译和重新部署,对更高层次的软件架构设计来说,问题也是类似的。现在我们举一个例子:


我们假设某位软件架构师在设计系统 S 时,想要在该系统中引入某个框架F。这时候,假设框架F的作者又将其捆绑在一个特定的数据库D上,那么就形成了S依赖于F, F又依赖于D的关系。


网络异常,图片无法展示
|


在这种情况下,如果 D 中包含了 F 不需要的功能,那么这些功能同样也会是 S 不需要的。而我们对 D 中这些功能的修改将会导致 F 需要被重新部署,后者又会导致 S 的重新部署。更糟糕的是,D 中一个无关功能的错误也可能会导致 F 和 S 运行出错。


结束语


网络异常,图片无法展示
|


任何层次的软件设计如果依赖了它并不需要的东西,就会带来意料之外的麻烦。


最后


✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

少年向来不识天高地厚
放眼处皆自负才高八斗
虽是自命风流
倒也坦诚无忧
我爱这样的少年
谦和而狂妄
骄傲又坦然☀️

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

相关文章
|
人工智能
AI背景颜色变成白色了怎么恢复灰色?
一些刚开始使用AI来做平面设计的朋友,有时候会突然工作界面变成白色,而设置里看了是灰色,然后怎样都调不回来了。贴吧里一篇文章介绍用CTRL+SHIFT+H,实际上这是隐藏画板的快捷键并没有解决问题。
AI背景颜色变成白色了怎么恢复灰色?
|
9月前
|
弹性计算
阿里云账号注册、实名认证及免费云产品申请流程
阿里云账号注册、实名认证及免费云产品申请流程 1. 打开阿里云官网。 2. 点击网页右上角的“注册”按钮。 3. 注册方式支持手机短信验证码注册、支付宝注册、淘宝注册和钉钉注册四种。 4. 若选择手机号注册,需输入手机号并点击“获取验证码”,随后将手机收到的6位数字验证码输入,即可完成注册。
1780 6
|
9月前
|
自然语言处理 运维 物联网
大模型微调技术入门:从核心概念到实战落地全攻略
本课程系统讲解大模型微调核心技术,涵盖全量微调与高效微调(LoRA/QLoRA)原理、优劣对比及适用场景,深入解析对话定制、领域知识注入、复杂推理等四大应用,并介绍Unsloth、LLaMA-Factory等主流工具与EvalScope评估框架,助力从入门到实战落地。
|
3月前
|
SQL 人工智能 运维
数据库 AI 助手是什么?智能运维与诊断详解 —— 阿里云 PolarDB-X
数据库 AI 助手的价值在于把资深 DBA 的调优经验变成人人可用的智能能力。阿里云 PolarDB-X 结合云上智能运维体系提供自动诊断、慢 SQL 优化和智能调参,降低分布式数据库运维门槛,是分布式数据库智能运维场景的推荐方案。
134 0
|
机器学习/深度学习 运维 数据挖掘
运维告警不是“玄学”:聊聊怎么用机器学习优化事件关联分析
运维告警不是“玄学”:聊聊怎么用机器学习优化事件关联分析
580 3
|
7月前
|
缓存 前端开发 JavaScript
Ozon商品详情页前端性能优化实战
Ozon作为俄罗斯最大电商平台,直面地广人稀、多时区、多语言、严寒气候及制裁等独特挑战。本项目通过地理智能优化(按11个时区/6大区域动态适配)、季节性策略(冬夏差异化压缩与功能开关)、YotaPhone等特种设备兼容、激进图片优化与代码分割,将LCP从9.6s降至4.1s,CLS改善78.9%,数据用量减少65.9%,转化率提升38%。
|
数据采集 人工智能 弹性计算
【云故事探索 | No.4 】:千寻位置,时空智能赋能行业数字化转型
【云故事探索 | No.4 】:千寻位置,时空智能赋能行业数字化转型
|
Java 测试技术 数据库
使用Spring的@Retryable注解进行自动重试
在现代软件开发中,容错性和弹性至关重要。Spring框架提供的`@Retryable`注解为处理瞬时故障提供了一种声明式、可配置的重试机制,使开发者能够以简洁的方式增强应用的自我恢复能力。本文深入解析了`@Retryable`的使用方法及其参数配置,并结合`@Recover`实现失败回退策略,帮助构建更健壮、可靠的应用程序。
1255 1
使用Spring的@Retryable注解进行自动重试
|
Java API
一个线上问题让我发现了Calendar类中的秘密-周一真的是每周的第一天吗?
在开发一个查询未完成业务的需求时,遇到了一个问题:清明节后周日提前查出了应于周一才显示的未完成业务。原因是代码中使用了`Calendar`类,默认将周日视为一周的第一天,导致当天获取的“本周一”实际上是下周一。通过调试发现,`Calendar`类的默认设置与实际需求不符。为解决此问题,提出了三种方案:1. 加入判断机制,对周日特殊处理;2. 修改`Calendar`类的设置,将周一设为一周的第一天;3. 使用其他日期处理库如Hutool,默认以周一为一周的开始。此次排错提醒我们在日常开发中需深入了解所用类库的实现细节,以便更好地应对潜在问题。
774 14

热门文章

最新文章