软件架构之模块与组件

软件架构指软件系统的顶层结构,是为了解决软件系统复杂度带来的问题。

软件模块(Module)是一套一致而互相有紧密关连的软件组织。它分别包含了程序和数据结构两部分。现代软件开发往往利用模块作为合成的单位。模块的接口表达了由该模块提供的功能和调用它时所需的元素。模块是可能分开被编写的单位。这使它们可再用和允许人员同时协作、编写及研究不同的模块。

软件组件定义为自包含的、可编程的、可重用的、与语言无关的软件单元,软件组件可以很容易被用于组装应用程序中。

模块和组件都是系统的组成部分,只是从不同的角度拆分系统而已。

从逻辑的角度来拆分系统后,得到的单元就是“模块”;
从物理的角度来拆分系统后,得到的单元就是“组件”。
划分模块的主要目的是职责分离;
划分组件的主要目的是单元复用。

“组件”的英文 component 也可翻译成中文的“零件”一词。
“零件”更容易理解一些,“零件”是一个物理的概念,并且具备“独立且可替换”的特点。

以一个最简单的网站系统来为例。假设我们要做一个学生信息管理系统。
这个系统从逻辑的角度来拆分,可以分为“登录注册模块”“个人信息模块”“个人成绩模块”;
从物理的角度来拆分,可以拆分为 Nginx、Web 服务器、MySQL、Redis。

软件架构的出现有其历史必然性。
20 世纪 60 年代第一次软件危机【软件质量低下、项目无法如期完成、项目严重超支等】引出了“结构化编程”【“自顶向下、逐步细化、模块化”】,创造了“模块”概念,将复杂度分散;
20 世纪 80 年代第二次软件危机【扩展难的问题】引出了“面向对象编程”,创造了“对象”概念;
到了 20 世纪 90 年代“软件架构”开始流行,创造了“组件”概念。
我们可以看到,“模块”“对象”“组件”本质上都是对达到一定规模的软件进行拆分,差别只是在于随着软件的复杂度不断增加,拆分的粒度越来越粗,拆分的层次越来越高。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容