架构到底是什么
系统与子系统
维基百科定义的系统:
系统泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体,它的意思是“总体”、“整体”或“联盟”。
子系统的定义:
子系统也是由一群有关联的个体所组成的系统,多半会是更大系统中的一部分。
系统与子系统是观察的角度不同。
模块与组件
从逻辑的角度来拆分系统后,得到的单元就是“模块”,从物理的角度来拆分系统后,得到的单元就是“组件”。划分模块的主要目的是职责分离;划分组件的主要目的是单元复用。
框架与架构
框架的定义:
软件框架(Software Framework)通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。
架构的定义: > 软件架构指软件系统的“基础结构”,创造这些基础结构的准则,以及对这些结构的描述。
从定义上看,框架关注的是“规范”,架构关注的是“结构”,前者的英文是Framework,架构的英文是Architecture。
重新定义架构
将架构重新定义为:
软件架构指软件系统的顶层结构。
小结
架构是顶层设计;框架是面向变成或配置的半成品;组件是从技术维度上的复用;模块是从业务维度上职责的划分;系统是相互协同可运行的实体。
架构设计的历史背景
软件架构出现的历史背景如下:
- 机器语言(1940年以前):太难写、太难读、太难改
- 汇编语言(20世纪40年代):不同CPU的汇编指令和结构是不同的,不同机器需要编写不同的代码
- 高级语言(20世纪50年代):Fortran、LISP、Cobol
- 第一次软件危机与结构化程序设计(20世纪60年代~20世纪70年代):第一个结构化的程序语言Pascal诞生。主要特点是抛弃goto语句,采取“自顶向下、逐步细化、模块化”的方法,将软件的复杂度控制在一定范围内,从而从整体上降低了软件开发的复杂度
- 第二次软件危机与面向对象(20世纪80年代):面向对象的思想开始流行
软件架构正在流行是从20世纪90年代开始的。
软件架构的出现有其历史必然性,20世纪60年代第一次软件危机引出了“结构化编程”,创造了“模块”的概念;20世纪80年代第二次软件危机引出了“面向对象编程”,创造了“对象”的概念;到了20世纪90年代“软件架构”开始流行,创造了“组件”概念。
“模块”、“对象”、“组件”本质上都是对达到一定规模的软件进行拆分,差别只是在于随着软件的复杂度不断增加,拆分的粒度越来越细,拆分的层次越来越高。
架构设计的目的
架构设计的误区:
- 因为架构很重要,所以要做架构设计
- 不是每个系统都要做架构设计吗
- 公司流程要求系统开发过程中必须要有架构设计
- 为了高性能、高可用、高扩展,所以要做架构设计
架构设计的主要目的是为了解决软件系统复杂度带来的问题。
架构即重要决策,需求驱动架构,架起分析与设计实现的桥梁。
Note: Cover Picture