“架构”到底指什么
对于开发人员来说,架构是一个最常见不过的名词了: 给新员工介绍软件整体架构,参加架构设计评审,学习优秀的架构设计。那么深究一下架构是什么,很多人都回答不上来。
我们先理清以下的几个概念,再来回答架构是什么。
系统与子系统
系统(英语:system;德语:system;法语:système;西班牙语:sistema)泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。——维基百科
提炼一下关键字
- 关联: 一群有关联的个体组成,没有关联的个体不能成为一个系统。
- 规则: 系统内部按照指定的规则运作,而不是个个各自为政。规则规定了系统内的个体分工和协作方式。
- 能力: 系统能力与个体能力有本质的差别,系统能力不是个体能力之和,而是产生了新的能力。
子系统的定义与系统是一样的,只是观察角度不同。一个系统可能是另外更大的系统的子系统。
模块与组件
模块和组件容易混淆,先看看维基百科的定义。
【模块】
软件模块(Software Module)是一套一致而互相有紧密关连的软件组织。包含了程序和数据结构两个部分。
【组件】
定义为自包含的、可编程的、可重用的、与语言无关的软件单元。
这两个定义看起来毫不关联,因为软件模块和软件组件都是系统的组成部分,他们只是从不同的角度拆分系统而已。
从逻辑角度上拆分后得到的是“模块”,从物理角度上拆分后得到的是“组件”。
假设一个电商项目,从逻辑角度上拆分,可以分为“订单模块”,“商品模块”,“购物车模块”。从物理角度上拆分,可以分为“Nignx”,“Web服务器”,“MySQL”,“Redis”等。
框架与架构
还是先看维基百科上对框架的定义
软件框架(software framework),通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。
提炼一下关键字
- 软件组件规范。例如MVC规范,MVP,MVVM之类的。
- 提供基础功能。例如Spring框架中的SpringMVC满足了MVC开发规范,Spring还提供了很多功能帮助我们实现功能。
再看看维基百科对架构的定义
软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。
从定义上看,框架和架构还是有区别的,框架关注的是“规范”,架构关注的是“结构”。
重新定义架构
我们可以将软件架构重新定义: 软件架构是软件系统的顶层结构。
系统是有一群关联的个体组成,这些“个体”可以是“子系统”,“模块”,“组件”等,架构需要明确系统包含哪些“个体”;系统个体需要“根据某种规则”运作,架构需要明确个体之间写作文的规则;整体结构换成“顶层结构”,可以更好的区分系统和子系统。