作者:guisuhuang,腾讯 PCG SRE 工程师
在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解 。在不同的书籍上, 不同的作者, 对于架构的定义也不统一, 角度不同, 定义不同 。此君说的架构和彼君理解的架构未必是一回事 。因此我们在讨论架构之前,我们先讨论架构的概念定义, 因为概念是人认识这个世界的基础和用来沟通的手段,如果对架构概念理解不一样,那沟通起来自然不顺畅,本文根据相关资料进行总结 。一、架构是什么
linux 有架构,MySQL 有架构,JVM 也有架构,使用 JAVA 开发、MySQL 存储、跑在 Linux 上的业务系统也有架构,应该关注哪一个?想要清楚以上问题需要梳理几个有关系又相似的概念:系统与子系统、模块与组建、框架与架构 。
一)、系统与子系统
系统:泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能独立完成的工作能力的群体,关键词:
关联:系统是由一群有关联的个体组成的,没有关联的个体堆在一起不能成为一个系统 。例如,把一个发动机和一台 PC 放在一起不能称之为一个系统,把发动机、底盘、轮胎、车架组合起来才能成为一台汽车 。
规则:系统内的个体需要按照指定的规则运作,而不是单个个个体各自为政 。规则规定了系统内个体分工和协作的方式 。例如,汽车发动机负责产生动力,然后通过变速器和传动轴, 将动力输出到车轮上,从而驱动汽车前进 。
能力:系统能力与个体能力有本质的差别,系统能力不是是个体能力之和,而是产生了新的能力 。例如,汽车能够载重前进,而发动机、变速器、传动轴、车轮本身都不具备这样的能力 。
子系统:也是由一群关联的个体组成的系统,多半是在更大的系统中的一部分 。
二)、模块与组件
都是系统的组成部分,从不同角度拆分系统而已 。模块是逻辑单元,组件是物理单元 。
模块就是从逻辑上将系统分解,即分而治之,将复杂问题简单化 。模块的粒度可大可小,可以是系统,几个子系统、某个服务,函数,类,方法、 功能块等等 。划分模块的主要目的是职责分离 。
组件可以包括应用服务、数据库、网络、物理机、还可以包括 MQ、容器、Nginx 等技术组件 。划分组件的主要目的的是单元复用 。"组件"的英文单词 Component,对应中文的"零件"一词,"零件"更容易理解一些 。"零件"是一个物理的概念, 并且具备"独立且可替换"的特点 。现在越来越多的 UI 设计使用组件化化和模块化 。
三)、框架与架构
框架通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范, 也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品 。
框架是组件实现的规范,例如:MVC、MVP、MVVM 等,是提供基础功能的产品,例如开源框架:Ruby on Rails、Spring、Laravel、Django 等,这是可以拿来直接使用或者在此基础上二次开发 。再例如,SpringMVC 是 MVC 的开发框架,除了满足 MVC 的规范,Spring 提供了很多基础功能来帮助我们实现功能,包括注解(@Controller 等)、Spring Security、SpringJPA 等很多基础功能 。
框架是规范,架构是结构:框架和架构的区别还是比较明显的,框架关注的是"规范", 架构关注的是"结构":
-
框架的英文是 Framework ,例如,SpringMVC 是"Web MVC Framework";
-
架构的英文是 Architecture,例如,Linux 操作系统的架构 。
在 TOGAF9 是这么定义:一个系统基本的构件(子系统, 模块, 组件),体现在它的各个构件、构件间的相互关系、构件与环境间的关系,以及对系统设计和演进进行治理的原则中 。两种含义:
-
一个系统的形式化描述,或指导系统实现的构件级的详细计划;
-
一组构件的结构、构件间的相互关系、以及对这些构件的设计和随时间演进的过程进行治理的一些原则和指导策略 。
架构从字面意思上,是源于古代的建筑术语 。把架构拆分成两个字“架”和“构” 。“架”就是“加”和“木”的结合,把木头加起来、连接起来就是架 。“构”就是结构的意思 。所以,“架构”就是把“木“按照一定的结构连接起来 。
推荐阅读
- Go 语言自带设计模式
- 如何做好表结构设计?
- 十个提高你网页设计能力的 CSS 技巧
- 求职|上海36岁设计师被HR喊叔,求职遭拒因为年龄不合适
- |三版人民币炼钢五元,设计精美,市场认知度高,收藏价值大
- 工装是什么意思(办公室装修)
- pe是什么材质(pe面料是什么材质)
- 包装设计是什么(包装设计的特点)
- 什么是产品设计(低碳环保的产品设计)
- 设计师接单平台排行__68design接单靠谱么?