《从零开始学架构》学习笔记(一) 架构到底是什么

系统与子系统

系统泛指由一群关联的个体组成,根据某种规则运作,能完成个别原件不能单独完成的工作的群体。它的意思是”总体“、“整体”、“联盟”
子系统也是由一群关联的个体所组成的系统,多半会是更大系统的一部分

其实系统和子系统的定义时一样的,只是观察的角度有差异,一个系统可能是另外一个更大系统的子系统

例:
微信本身是一个系统,包含聊天、登录、支付、朋友圈等子系统
朋友圈又包括动态、评价、点赞等子系统
评论有可能包括子系统、审核子系统、发布子系统、存储子系统
评论审核子系统不在包含业务意义上的子系统,而是包含各个模块或组件,这些模块或组件本身也是另外一个维度上的系统。例如MySQL、Redis等是存储系统,但不是业务子系统

模块与组件

模块和组件都是系统的组成部分,只是从不同的角度拆分系统而已。

  • 从逻辑的角度来拆分系统后,得到的单元就是模块
  • 从物理的角度来拆分系统后,得到的单元就是组件

不同角度划分的目的:

  • 划分模块的主要目的是职责分离
  • 划分组件的主要目的是单元复用

例:
假设我们需要做一个学生信息管理系统,这个系统从逻辑角度来拆分,可以分为登录注册模块、个人信息模块、个人成绩模块;从物理的角度来拆分,可以拆分为nginx、web服务器、mysql

框架与架构

框架

框架是组件规范,例如MVC就是一种常见的开发规范,类似的还有MVP、MVVM、J2EE等框架
框架提供基础功能的产品,例如Spring MVC是MVC的开发框架,除了满足MVC的规范,Spring提供了很多基础功能来帮助我们实现功能,包括注解等基础功能

架构

软件架构指的是软件系统的基础结构,创造这些基础结构的准则,以及对这些结构的描述.
框架关注的是规范,架构关注的是结构。框架英文是Framework,架构英文是Architecture.

结论: 软件架构指的是软件系统的顶层结构

以学生管理系统为例,从业务逻辑的角度分解,架构是
20180824153509357523253.png
从物理部署的角度分解,学生管理系统的架构是
20180824153509362521804.png
从开发的角度分解,学生管理系统可以采用标准MVC框架开发,因此架构又变成了MVC架构
20180824153509366449720.png

这些都是学生管理系统正确的架构,只是从不同的角度来分解而已,这也是IBM的RUP将软件架构视图分为著名的4+1视图的原因

总结

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