软件架构指软件系统的顶层结构,是为了解决软件系统复杂度带来的问题。
软件模块(Module)是一套一致而互相有紧密关连的软件组织。它分别包含了程序和数据结构两部分。现代软件开发往往利用模块作为合成的单位。模块的接口表达了由该模块提供的功能和调用它时所需的元素。模块是可能分开被编写的单位。这使它们可再用和允许人员同时协作、编写及研究不同的模块。
软件组件定义为自包含的、可编程的、可重用的、与语言无关的软件单元,软件组件可以很容易被用于组装应用程序中。
模块和组件都是系统的组成部分,只是从不同的角度拆分系统而已。
从逻辑的角度来拆分系统后,得到的单元就是“模块”;
从物理的角度来拆分系统后,得到的单元就是“组件”。
划分模块的主要目的是职责分离;
划分组件的主要目的是单元复用。
“组件”的英文 component 也可翻译成中文的“零件”一词。
“零件”更容易理解一些,“零件”是一个物理的概念,并且具备“独立且可替换”的特点。
以一个最简单的网站系统来为例。假设我们要做一个学生信息管理系统。
这个系统从逻辑的角度来拆分,可以分为“登录注册模块”“个人信息模块”“个人成绩模块”;
从物理的角度来拆分,可以拆分为 Nginx、Web 服务器、MySQL、Redis。
软件架构的出现有其历史必然性。
20 世纪 60 年代第一次软件危机【软件质量低下、项目无法如期完成、项目严重超支等】引出了“结构化编程”【“自顶向下、逐步细化、模块化”】,创造了“模块”概念,将复杂度分散;
20 世纪 80 年代第二次软件危机【扩展难的问题】引出了“面向对象编程”,创造了“对象”概念;
到了 20 世纪 90 年代“软件架构”开始流行,创造了“组件”概念。
我们可以看到,“模块”“对象”“组件”本质上都是对达到一定规模的软件进行拆分,差别只是在于随着软件的复杂度不断增加,拆分的粒度越来越粗,拆分的层次越来越高。
网友评论