架构设计的关键思维是判断和取舍,程序设计的关键思维是逻辑和实现。
系统与子系统
维基定义:
系统泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。
关联:没有关联的个体堆在一起不能成为一个系统;
规则:规则规定了系统内个体分工和协作的方式;
能力:系统能力不是个体能力之和,而是产生了新的能力。
子系统也是由一群有关联的个体所组成的系统,多半会是更大系统中的一部分。
以微信为例说明:
- 微信本身是一个系统,包含聊天、登录、支付、朋友圈等子系统;
- 朋友圈这个系统又包括动态、评论、点赞等子系统;
- 评论这个系统可能又包括防刷子系统、审核子系统、发布子系统、存储子系统;
- 评论审核子系统不再包含业务意义上的子系统,而是包括各个模块或者组件,这些模块或者组件本身也是另外一个维度上的系统。例如,MySQL、Redis 等是存储系统,但不是业务子系统;
模块与组件
维基定义:
软件模块(Module)是一套一致而互相有紧密关连的软件组织。它分别包含了程序和数据结构两部分。现代软件开发往往利用模块作为合成的单位。模块的接口表达了由该模块提供的功能和调用它时所需的元素。模块是可能分开被编写的单位。这使它们可再用和允许人员同时协作、编写及研究不同的模块。
软件组件定义为自包含的、可编程的、可重用的、与语言无关的软件单元,软件组件可以很容易被用于组装应用程序中。
模块和组件都是系统的组成部分,只是从不同的角度拆分系统而已:
- 从逻辑的角度来拆分系统后,得到的单元就是“模块”;
- 从物理的角度来拆分系统后,得到的单元就是“组件”;
划分模块的主要目的是职责分离;
划分组件的主要目的是单元复用;
以一个学生信息管理系统为例说明:
- 从逻辑的角度来拆分,可以分为登录注册模块、个人信息模块、个人成绩模块;
- 从物理的角度来拆分,可以拆分为 Nginx、Web 服务器、MySQL;
框架与架构
维基定义:
软件框架(Software framework)通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。
框架是组件规范:例如,MVC 就是一种最常见的开发规范,类似的还有 MVP、MVVM、J2EE 等框架;
框架提供基础功能的产品:例如,Spring MVC 是 MVC 的开发框架,除了满足 MVC 的规范,Spring 提供了很多基础功能来帮助我们实现功能,包括注解、Spring Security、Spring JPA 等很多基础功能。
软件架构指软件系统的基础结构,创造这些基础结构的准则,以及对这些结构的描述。
继续以一个学生信息管理系统为例说明:
从业务逻辑的角度分解,学生管理系统的架构是:
从物理部署的角度分解,“学生管理系统”的架构是:
从开发规范的角度分解,“学生管理系统”可以采用标准的 MVC 框架来开发,因此架构又变成了 MVC 框架:
--------来源《极客课程》∙ 学习摘要