1.系统与子系统
系统泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。它的意思是“总体”“整体”或“联盟”。
关联:系统是由一群有关联的个体组成的,没有关联的个体堆在一起不能成为一个系统。例如,把一个发动机和一台 PC 放在一起不能称之为一个系统,把发动机、底盘、轮胎、车架组合起来才能成为一台汽车。
规则:系统内的个体需要按照指定的规则运作,而不是单个个体各自为政。规则规定了系统内个体分工和协作的方式。例如,汽车发动机负责产生动力,然后通过变速器和传动轴,将动力输出到车轮上,从而驱动汽车前进。
能力:系统能力与个体能力有本质的差别,系统能力不是个体能力之和,而是产生了新的能力。例如,汽车能够载重前进,而发动机、变速器、传动轴、车轮本身都不具备这样的能力。
子系统也是由一群有关联的个体所组成的系统,多半会是更大系统中的一部分。
以微信为例,可以看出他们的关系
2.模块与组件
软件模块(Module)是一套一致而互相有紧密关连的软件组织。它分别包含了程序和数据结构两部分。现代软件开发往往利用模块作为合成的单位。模块的接口表达了由该模块提供的功能和调用它时所需的元素。模块是可能分开被编写的单位。这使它们可再用和允许人员同时协作、编写及研究不同的模块。
软件组件定义为自包含的、可编程的、可重用的、与语言无关的软件单元,软件组件可以很容易被用于组装应用程序中。
模块:从逻辑的角度来拆分系统后的单元,目的是:职责分离
组件:从物理的角度来拆分系统后的单元,目的是:单元复用(可以理解为零件)
学生管理系统从模块划分:
学生管理系统从组件划分:
3. 框架与架构
软件框架(Software framework)通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。
框架是组件规范,框架提供基础功能的产品
软件架构指软件系统的“基础结构”,创造这些基础结构的准则,以及对这些结构的描述。
从定义的角度来看,框架和架构的区别还是比较明显的,框架关注的是“规范”,架构关注的是“结构”。框架的英文是 Framework,架构的英文是 Architecture。
采用不同的角度或者维度,可以将系统划分为不同的结构
-
从业务逻辑的角度分解,“学生管理系统”的架构是:
-
从物理部署的角度分解,“学生管理系统”的架构是:
- 从开发规范的角度分解,“学生管理系统”可以采用标准的 MVC 框架来开发,因此架构又变成了 MVC 架构:
4.总结
架构:指软件系统的顶层结构。
首先,“系统是一群关联个体组成”,这些“个体”可以是“子系统”“模块”“组件”等;架构需要明确系统包含哪些“个体”。
其次,系统中的个体需要“根据某种规则”运作,架构需要明确个体运作和协作的规则。
第三,维基百科定义的架构用到了“基础结构”这个说法,我改为“顶层结构”,可以更好地区分系统和子系统,避免将系统架构和子系统架构混淆在一起导致架构层次混乱。
5.注:
架构是顶层设计;
框架是面向编程或配置的半成品;
组件是从技术维度上的复用;
模块是从业务维度上职责的划分;
系统是相互协同可运行的实体。
框架是规矩,架构是按照规矩做规划。
系统是学校,子系统是班级,
模块是学生老师,
组件是课桌椅。