组件构建原则(四):稳定依赖原则

简介: 组件构建原则(四):稳定依赖原则

背景介绍


这是我的《架构整洁之道》系列的第十四篇,这篇文章的内容为稳定依赖原则。

《架构整洁之道》系列:


稳定依赖原则


依赖关系必须要指向更稳定的方向。

任何一个我们预期会经常变更的组件都不应该被一个难于修改的组件所依赖,否则这个多变的组件也将会变得非常难以被修改。


稳定性


Webster 在线字典中的描述: 稳定指的是“很难移动“。

那么一个立在桌子上的硬币是稳定的么?

当然不是,一碰就倒

而相比起来,桌子就更加的稳定,因为移动它需要我们要更大的力。


所以类比下来,组件的稳定性也与其变更难度有关。本章节关于修改难度就集中于“依赖”这一点,而让软件组件难于修改的一个最直接的办法就是让很多其他组件依赖于它。带有许多入向依赖关系的组件是非常稳定的,因为它的任何变更都需要应用到所有依赖它的组件上。


  • 独立组件


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


上图中 x 是一个稳定的组件。因为有三个组件依赖着 x,所以 x 有三个不应该被修改的原因。这里就说 x 要对三个组件负责。另一方面,x 不依赖于任何组件,所以不会有任何原因导致它需要被变更,我们称它为“独立”组件。


  • 依赖性组件


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


下图中的 y 组件,这是一个非常不稳定的组件。由于没有其他的组件依赖 Y,所以 Y 并不对任何组件负责。但因为 Y 同时依赖于三个组件,所以它的变更就可能由三个不同的源产生。这里就说 Y 是有依赖性的组件。


稳定性指标


如何来量化一个组件的稳定性呢:


其中一种方法是计算所有入和出的依赖关系。通过这种方法,我们就可以计算出一个组件的位置稳定性.

  • Fan-in:入向依赖,这个指标指代了组件外部类依赖于组件内部类的数量。
  • Fan-out:出向依赖,这个指标指代了组件内部类依赖于组件外部类的数量 。
  • I:不稳定性,I = Fan-out / (Fan-in + Fan-out)。该指标的范围是[0,1],I = O 意味着组件是最稳定的, I = 1 意味着组件是最不稳定的。


稳定依赖原则 (SDP) 的要求:


每个组件的 I 指标都必须大于其所依赖组件 的 I 指标。也就是说,组件结构依赖图中各组件的 I 指标必须要按其依赖关系方向递减。


并不是所有组件都应该是稳定的:


如果一个系统中的所有组件都处于最高稳定性状态,那么系统就一定无法再进行变更了,这显然不是我们想要的。事实上,我们设计组件架构图的目的就是要决定应该让哪些组件稳定,让哪些组件不稳定。


结束语


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


如果上文原则无法满足怎么办? 我们可以参考 设计原则(六):DIP 依赖反转原则,以及组件构建原则(三):无依赖环原则 文章的打破循环依赖章节~


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

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

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

相关文章
|
8月前
|
存储 前端开发 安全
OnlyOffice 平替,用 Vue3 + Vite 做了个“本地 OnlyOffice”:接入成本低到离谱!!!
onlyoffice-web-local 是基于 Vue3+Vite 的纯前端本地 Office 编辑器,复用 OnlyOffice Web SDK 与 x2t-wasm,支持浏览器内打开/编辑/导出 Word/Excel/PPT,无需服务端部署,文件不出终端,隐私安全、接入极简,专治“只需单人编辑”的轻量场景。(239字)
1834 0
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
以小胜大!千问Qwen3.5重磅发布,每百万Token仅0.8元
阿里巴巴开源全新一代千问Qwen3.5-Plus:全球最强开源大模型,3970亿参数、仅激活170亿,原生多模态,支持图文视频理解与长视频分析;推理吞吐量最高提升19倍,API价格低至0.8元/百万Token。
以小胜大!千问Qwen3.5重磅发布,每百万Token仅0.8元
|
存储 人工智能 编解码
AI怎么输出不乱码
本文深度解析AI生成内容乱码(如“锟斤拷”)的三大根源:Token切片导致汉字截断、SSE流式传输解析不当、Unicode扩展字符兼容问题;AI导出鸭并提供工程化解决方案——基于TextDecoder的字节流缓冲、标准化Markdown+KaTeX渲染,等一键导出工具,实现从AI输出到PDF/Word的专业无损落地。(239字)
2329 0
|
7月前
|
安全 Cloud Native Java
吃透 API 网关:从核心原理、架构选型到千万级 QPS 高性能设计实战
API网关是微服务架构的流量中枢,承担统一接入、智能路由、安全防护、流量治理、协议转换与可观测性等核心能力。它解耦客户端与后端服务,提升系统稳定性、安全性与可维护性,是云原生架构的关键基础设施。
828 1
|
8月前
|
人工智能 API 开发工具
AI Compose Commit:用 AI 智能重构 Git 提交工作流
HagiCode 推出「AI Compose Commit」功能,利用 AI 智能分析未提交变更,自动分组逻辑提交、生成符合 Conventional Commits 规范的提交信息,并一键执行。支持多仓库、异步处理与实时通知,大幅提升 Git 工作流效率,让开发者专注编码而非琐碎提交。(239字)
704 15
|
设计模式 存储 算法
分布式系统架构5:限流设计模式
本文是小卷关于分布式系统架构学习的第5篇,重点介绍限流器及4种常见的限流设计模式:流量计数器、滑动窗口、漏桶和令牌桶。限流旨在保护系统免受超额流量冲击,确保资源合理分配。流量计数器简单但存在边界问题;滑动窗口更精细地控制流量;漏桶平滑流量但配置复杂;令牌桶允许突发流量。此外,还简要介绍了分布式限流的概念及实现方式,强调了限流的代价与收益权衡。
951 12
|
人工智能 物联网 Shell
今日 AI 开源|共 12 项|开源的DIY健康追踪项目,基于低成本的智能戒指构建私人的健康监测应用
本文介绍了多个开源项目,涵盖了从量子计算错误纠正到视频生成和编辑的广泛应用领域。这些项目展示了AI技术在不同领域的创新和应用潜力。
1406 10
今日 AI 开源|共 12 项|开源的DIY健康追踪项目,基于低成本的智能戒指构建私人的健康监测应用
|
人工智能 自然语言处理 IDE
💡通义灵码:让每个人都能成为软件开发的「超级个体」
通义灵码是阿里巴巴达摩院推出的大模型技术,支持多种编程语言和框架,具备强大的自然语言理解和生成能力。它能够自动生成代码、自动化测试、文档编写等,显著提升开发效率,降低技术门槛,让每个人都能轻松参与软件开发。通义灵码不仅支持多语言、多编辑器,还具备智能问答、代码优化等功能,为企业和开发者提供全方位的支持。通过通义灵码,开发者可以从繁琐的任务中解放出来,专注于创新和创意,推动软件开发进入新时代。
1926 4
💡通义灵码:让每个人都能成为软件开发的「超级个体」
|
JavaScript 前端开发
js_Ipv4以及ipv4段正则校验
几种JavaScript正则表达式,用于校验IPv4地址的有效性,包括支持CIDR表示法的变体。
503 4
|
域名解析 自然语言处理 API
如何使用PageAdmin CMS网站管理系统搭建网站?
CMS(内容管理系统)是一种位于网站前台界面与后台数据库之间的软件系统,能够实现网站内容的发布、编辑、管理、维护等操作。使用PageAdmin CMS网站管理系统搭建网站,先在官网上填写相关资料,注册一个会员账户,选择模版中心选择一个...
628 3

热门文章

最新文章