# 架构设计和程序设计的区别

架构设计的关键思维是判断和取舍,程序设计的关键思维是逻辑和实现。

# 架构是什么?

这要从树立清楚几个关系

  1. 系统与子系统
  2. 模块与组件
  3. 架构与框架

# 系统与子系统

# 系统的定义

系统泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。它的意思是“总体”“整体”或“联盟”。

  1. 关联:系统是由一群有关联的个体组成的,没有关联的个体堆在一起不能成为一个系统。例如,把一个发动机和一台PC放在一起不能称之为一个系统,把发动机、底盘、轮胎、 车架组合起来才能成为一台汽车。
  2. 规则:系统内的个体需要按照指定的规则运作,而不是单个个体各自为政。规则规定了系统内个体分工和协作的方式。例如,汽车发动机负责产生动力,然后通过变速器和传动 轴,将动力输出到车轮上,从而驱动汽车前进。
  3. 能力:系统能力与个体能力有本质的差别,系统能力不是个体能力之和,而是产生了新的能力。例如,汽车能够载重前进,而发动机、变速器、传动轴、车轮本身都不具备这样 的能力。

# 子系统的定义

子系统也是由一群有关联的个体所组成的系统,多半会是更大系统中的一部分。

# 系统和子系统的理解

子系统的定义和系统定义是一样的,只是观察的角度有差异

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

# 模块与组件

# 定义的区分从观察角度来看

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

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

# 架构与框架

# 软件框架

1.软件框架(Software framework)通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基 础功能的软件产品。 2.软件架构指软件系统的“基础结构”,创造这些基础结构的准则,

# 框架的定义:

  1. 框架是组件规范:例如,MVC就是一种最常见的开发规范,类似的还有MVP、MVVM、J2EE等框架。
  2. 框架提供基础功能的产品:例如,Spring MVC是MVC的开发框架,除了满足MVC的规范,Spring提供了很多基础功能来帮助我们实现功能,包括注解 (@Controller等)、Spring Security、Spring JPA等很多基础功能。
# 说到底框架是和架构比较相似的概念,且两者有较强的关联关系。区分的关键就是“基础结构”这个概念并没有明确说是从什么角度来分解的。

举例:

# 逻辑的角度
  1. 登录注册模块,
  2. 个人信息模块
  3. 个人成绩模块
# 物理的角度
  1. Nginx
  2. Web服务器
  3. MySQL
# 开发规范的角度

可以采用标准的MVC框架来开发(controller,view,model)

# 总而言是,所以说框架是从开发者从代码开发的角度去看待的架构。