咱们在进行系统设计时,常常会容易混淆使用系统、子系统、架构、框架、模块、组件等这些名词,梳理这些与架构设计有个的概念,有助于咱们更好的进行系统设计。编程
1、系统与子系统
系统:根据维基百科定义,系统泛指由一群有关联的个体组成,根据某种规则运做,能完成个别元件不能单独完成的工做的群体。缓存
子系统:子系统是由一群有关联的个体所组成的系统,一般是更大系统中的一部分。微信
系统和子系统的概念相对比较容易理解,好比微信是个系统,聊天、朋友圈、公众号就是它比较重要的三个子系统。数据结构
2、架构和框架
软件架构:根据维基百科定义,架构是有关软件总体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。架构
软件框架:根据维基百科定义,框架一般指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。框架的功能相似于基础设施,与具体的软件应用无关,可是提供并实现最为基础的软件架构和体系。软件开发者一般依据特定的框架实现更为复杂的商业运用和业务逻辑。这样的软件应用能够在支持同一种框架的软件系统中运行。简而言之,框架就是制定一套规范或者规则,你们在该规范或者规则下工做。框架
架构和框架的概念比较类似,且二者一般都有比较强的关联。框架强调的是规范以及与之相对应实现的基础软件产品。架构强调的是总体结构,各组件或者模块的相互关系,是系统的顶层设计。布局
好比,咱们常常说咱们采用Spring MVC框架进行开发,是基于MVC架构的。前者指的是具体的软件产品,后者指的是系统的总体结构。搜索引擎
架构一般又能够分为功能架构和技术架构。功能架构是从系统功能的角度来描述系统的总体结构,相似于建筑中的建筑设计,因此建筑图就是从功能方面来描述一个建筑,如一楼商场及其布局,二楼餐饮及其布局等。技术架构是从技术的角度来描述系统的总体结构,相似建筑中的结构设计,如钢筋、承重梁及其相互关系。(题外话:软件工程脱胎于建筑工程,因此软件工程中不少过程都能从建筑工程中找到对应的过程)spa
如一个图书管理系统,功能架构图示意以下:架构设计
技术架构图示意以下:
3、模块和组件
软件模块:根据维基百科定义,软件模块是一套一致而互相有紧密关连的软件组织,包含了程序和数据结构两个部分。是现代软件开发每每利用模块做合成的单位。模块的接口表达了由该模块提供的功能和调用它时所需的元素。模块是可能分开地被编写的单位,能容许普遍人员同时协做、编写及研究不一样的模块。
软件组件:根据维基百科定义,软件组件为定义为自包含的、可编程的、可重用的、与语言无关的软件单元。软件组件能够很容易被用于组装应用程序中。
上面的定义比较拗口,其实模块和组件都是系统的组成部分,只不过它们是从不一样的角度来拆分系统。模块是从功能的角度来拆分,组件是从物理或者说实现的技术角度来拆分。划分模块的主要目的是职责分离,划分组件的主要目的是单元复用。
以图书管理系统来讲,读者信息管理、书籍信息管理这些都是模块。缓存组件、搜索引擎等就是组件。
另一个容易混淆的概念就是子系统和模块。子系统是独立运行的,模块是子系统的逻辑组成部分。模块在必定条件下,变成独立运行,就转化为子系统。举一个不必定很是恰当的例子,好比在某个大型的商业广场,若是厕所和商场一块儿,那么厕所就是商场的一个模块。若是厕所与商场分离,是独立的公共厕所,那么厕所就算是商业广场的子系统。
4、总结
框架强调的是规范以及与之相对应实现的基础软件产品。架构强调的是总体结构,各组件或者模块的相互关系,是系统的顶层设计。
系统和子系统都是泛指由一群有关联的个体组成,根据某种规则运做,能完成个别元件不能单独完成的工做的群体。二者差异就是大小的关系。
模块和组件都是系统的组成部分,模块是从功能的角度来拆分,组件是从物理或者说实现的技术角度来拆分。划分模块的主要目的是职责分离,划分组件的主要目的是单元复用。
子系统是独立运行的,模块是子系统的逻辑组成部分。模块在必定条件下,变成独立运行,就转化为子系统。