架构,貌似对我们来说并不陌生,因为工作中时不时会提到架构,如今市面上也有各种XXX架构师的职位。
更多时候我们还会调侃架构师只是一群画图做PPT的人…但,我们真的理解什么是架构吗?
确实有必要梳理下概念,有个整体的认识,以便更好的深耕细分领域,共勉!
什么是架构
架构这个词起源于建筑,是一个比较宽泛的概念,业内也未有标准的定义。
架构,又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。– 摘自百度百科
软件架构(Software Architecture)是一系列相关的抽象模式,从本质上来看,属于一种系统草图。
几个概念
软件架构中几个有关系而又相似的概念。
架构 与 设计
所有架构都是设计,但并非所有设计都是架构。架构反映了使一个系统成型的重要设计决策,而重要性则通过改变的成本来衡量。
从本质上讲,重要决策即架构,其他的都是设计。重要决策包括:
- 系统的形态,eg. 客户端-服务器、基于Web、原生移动客户端、分布式、异步等等。
- 软件系统的结构,eg. 组件、层、交互等等。
- 技术选择,eg. 编程语言、部署平台等等。
- 框架选择,eg. Web MVC框架、持久层/ORM框架等等。
- 设计方法/模式选择,eg. 针对性能、可伸缩性、可用性等的方法。
架构是软件的整体结构设计。
系统 和 子系统
系统是由相互作用相互依赖的若干组成部分结合而成的,具有特定功能的有机整体,而且这个有机整体又是它从属的更大系统的组成部分。– 摘自百度百科
系统是一个可以独立存在的完整实体,由一组完成特定任务的功能组成。
系统和子系统的概念是相对的,当作为另一个系统的一部分时,系统就成为一个子系统。
比如电商系统有支付系统、订单系统、用户系统等等子系统。
模块 和 组件
模块和组件都是系统的组成部分,只是从不同的角度拆分系统:
- 从逻辑层面,系统可拆分为各个模块,如 登录注册模块、权限管理模块等;划分模块是为了职责分离。
- 从物理层面,系统可拆分为各个组件,如 Web服务器、数据库、缓存中间件等;划分组件是为了单元复用。
另,模块和系统一般情况下没有本质区别,但是不能独立工作的模块一般不称之为系统。
框架 和 架构
软件框架(Software Framework),通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。– 摘自百度百科
框架是组件规范,eg. MVC、MVP、MVVM等开发规范;框架是提供基础功能的产品,eg. 国际化、日志记录等等。
框架关注的是“规范”,架构关注的是“结构”。
但很多时候,并没有完全界定,或者说框架是架构的具体实施。