一周重温架构简洁之道:聚沙成塔,软件系统的组件构建原则【玩转架构】
背景
前段时间我整理了一篇开发设计文档的经验——《磨刀不误砍柴工,分享编写前端技术设计文档的二三经验》,做为对于2023年的收尾。
2024年1月,一年之初,正是立Flag的好时机。因为我今年有几本小说作品的计划,所以被分去了一部分写作精力。有限的精力,想要发挥更高的效率,还是需要一些策略,于是我想到了可以借鉴一下总结开发设计文档的经验。
每月中的某一周阅读一本技术图书,然后再用一周时间产出技术收获。这样读书写作两不误,我便不没有精力有限的顾虑了。
本月的阅读计划是:《架构简洁之道》。距离我上次阅读这本书,已经过去很长时间了,除了标题,内容已经记不太清了。
子曰:“温故而知新。”我十分期待带着点“历尽千帆”的心境去重新阅读这本书而获得的收获。
文章速读
本篇主要分享关于组件构建原则的知识内容:
- 了解软件组件是什么。
- 了解如何用组件来构建系统。
组件构建原则
组件
组件是软件系统在部署过程中的部署单元且是可以独立完成部署的最小实体。
不同的语言,它们的组件略有不同:
- 在编译运行语言中,组件是一组二进制文件的集合。
- 在解释运行语言中,组件是一组源代码文件的集合。
无论采用什么编程语言来开发软件,良好的组件是可被独立部署、被单独开发的。
重定位技术
问题描述:应用程序代码的大小超出这个内存范围。
解决方案:生成可重定位的二进制文件。
方案原理:程序员修改编译器输出文件的二进制格式,使其可以由一个智能加载器加载到任意内存位置。
技术:链接加载器,可以将程序切分成多个可被分别编译、加载的程序段。
图1-1:应用程序内存布局
组件聚合
构建组件相关的基本原则:
- REP:复用/发布等同原则。该原则内容为:软件复用的最小粒度应等同于其发布的最小粒度。
- CCP:共同闭包原则。该原则指导程序员将那些会同时修改且为相同目的而修改的类放到同一个组件中,而将不会同时修改且不会为了相同目的而修改的那些类放到不同的组件中。
- CRP:共同复用原则。该原则指出:不要强迫一个组件的用户依赖他们不需要的东西。
组件聚合张力图
如上图为组件聚合张力图,该图描绘了三个原则彼此间的关系。
REP和CCP原则是黏合性原则,它们会让组件变得更大,而CRP原则是排除性原则,它会尽量让组件变小。软件架构师的任务就是要在这三个原则中间进行取舍。
组件耦合
组件之间的关系遵守的原则:
- 无依赖环原则:组件依赖关系图中不应该出现环。
- 稳定依赖原则:依赖关系必须要指向更稳定的方向。
自上而下的设计
组件结构图是不可能自上而下被设计出来的。它必须随着软件系统的变化而变化和扩张,而不可能在系统构建的最初就被完美设计出来。
这个结论是必不可免,同时想要理解也并不困难。
如果程序员在开始时,不可能知道哪些组件可以复用,对项目中的共同闭包也一无所知,所以也没办法在设计具体类之前就来设计组件依赖关系。组件依赖关系是必须要随着项目的逻辑设计一起扩张和演进的。
总结
我们来总结一下组件构建原则的主要内容:
- 开发者在程序运行时插入某些动态链接文件,这些动态链接文件所使用的就是软件架构中的组件概念。组件化的插件式架构已经成为程序员习以为常的软件构建形式。
- 构建组件的三个原则约束着程序员的设计决策,是一个复杂的决策过程。组件的构成安排应随着项目重心的不同,以及研发性与复用性的不同而不断演化。
- 可用于依赖关系管理的指标可以被用来量化分析某个系统设计与“优秀”设计模式之间的契合度。但是指标并不等同于真理,它只是对我们所定义标准的一个衡量。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)