本文主要对系统、模块、组件、框架和架构等概念做一个介绍区分,让读者理解架构到底是指什么,以及介绍下架构设计的历史背景。

前言

学习自极客时间《从0开始学架构》,本文主要对系统、模块、组件、框架和架构等概念做一个介绍区分,让读者理解架构到底是指什么,以及介绍下架构设计的历史背景。

系统和子系统

系统泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。

子系统同样也是系统,不过是观察角度的不同。一个系统可能是另一个更大的系统的子系统。比如,微信本身是一个系统,而它还包含聊天、支付、评论等子系统。

模块和组件

对一个系统进行逻辑上的划分,得到的就是多个模块,而进行物理上的划分,得到的就是多个组件。或者,模块是业务维度上按照职责的划分,组件是从技术维度上的复用。

比如对于一个学生信息管理系统,逻辑上可以划分为登录注册模块、个人信息模块、成绩查询模块等,物理上可以划分为NginxMySQLWeb服务器等。

框架和架构

框架提供基础的功能,关注组件规范;框架关注基础结构。

从不同的角度或者维度看,可以得到不同的结构,即不同的架构。比如学生信息管理系统,从业务逻辑上看,架构为注册登录模块、个人信息模块等;从物理部署上看,架构为NginxWeb服务器、MySQL等;从开发规范上看,可以采用MVC框架来开发,架构又为MVC架构。

对架构重新定义下,就是架构是软件系统的顶层结构。

其他人的精炼总结,架构是顶层设计;框架是面向编程或配置的半成品;组件是从技术维度上的复用;模块是从业务维度上职责的划分;系统是相互协同可运行的实体。

历史背景

20 世纪 60 年代第一次软件危机引出了“结构化编程”,创造了“模块”概念;20 世纪 80 年代第二次软件危机引出了“面向对象编程”,创造了“对象”概念;到了 20 世纪 90 年代“软件架构”开始流行,创造了“组件”概念。

我们可以看到,“模块”“对象”“组件”本质上都是对达到一定规模的软件进行拆分,差别只是在于随着软件的复杂度不断增加,拆分的粒度越来越粗,拆分的层次越来越高。

引用:
软件开发中是否存在所谓的“银弹”?
软件设计过程中,模块、对象、组件本质上是对一定规模软件在不同粒度和层次上的“拆分”方法论,软件架构是一种对软件的“组织”方法论。一分一合,其目的是为了软件研发过程中的成本、进度、质量得到有效控制。
但是,一个成功的软件设计是要适应并满足业务需求,同时不断“演化”的。设计需要根据业务的变化、技术的发展不断进行“演进”,这就决定了这是一个动态活动,出现新问题,解决新问题,没有所谓的“一招鲜”。

参考