# 系统架构

## 目录 <a href="#mu-lu" id="mu-lu"></a>

* 对外展现的功能
* 内部功能
* 功能交互与价值通路
* 系统架构

**目标**

* 认识系统的价值通路
* 认识功能架构，通过把功能结构与形式结构结合来描述系统架构

**受益原则**

好的架构必须使人受益，要想把架构做好，就要专注于功能的涌现，使得系统把它的主要功能通过跨越系统边界的接口对外展示出来

### 对外展现的功能 <a href="#dui-wai-zhan-xian-de-gong-neng" id="dui-wai-zhan-xian-de-gong-neng"></a>

ASP .NET Core 的使用者是程序员，最终的受益是老板

![](https://3083743005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8gwpNo3eyzHkX0O40HRA%2Fuploads%2FpekHFwnC20MgSPAB1gKD%2F261.jpg?alt=media\&token=cc1961a4-9949-40a7-9607-40c937ae14d9)

上一讲对 ASP .NET Core 的描述是文字性描述，是一种非结构性描述，不是很准确，因为每个人对文字的理解都不一样

ASP .NET Core 对外展现的功能和价值可以主要拆分为两个过程：启动和执行

启动的时候有目标，就是代码；执行的时候有请求和响应

**如何描述一个功能**

![](https://3083743005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8gwpNo3eyzHkX0O40HRA%2Fuploads%2Fx1JwOcMI32CvKQh0ftBJ%2F262.jpg?alt=media\&token=8c4eeeb0-e05c-4d92-8759-9bc6fd9f08a7)

一个过程通常会改变操作数对象的状态（包括创建、销毁）

![](https://3083743005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8gwpNo3eyzHkX0O40HRA%2Fuploads%2FfzdZoU0XT6SzHqTkNU5L%2F263.jpg?alt=media\&token=5ae4830a-3d19-4257-ac53-e44f33be6e12)

功能需要由一个形式来进行承载，有时候我们也称之为工具对象（你的代码）

比如烧水需要一个烧水壶，但是烧水壶没办法提供热水，这个系统通过把水加热给我提供热水

加热是过程，水是操作数对象，通过加热的过程改变了水的温度，实现了整个系统的目标，为我提供热水

这里面我们可以发现加热需要一个工具对象，使用什么进行加热，燃气灶、柴火还是煤气

**功能就是通过一个工具对象实施一个过程来改造一个目标操作数对象的一些状态来实现一些目标**

ASP .NET Core 对外展现的功能和价值

| 与价值有关的操作数 | 与价值有关的属性及状态 | 与价值有关的过程 | 系统的形式               |
| --------- | ----------- | -------- | ------------------- |
| web 请求    | web 请求响应体   | 影响/改变    | 带自托管的 WEB FRAMEWORK |

* 系统所带来的利益与它对外展现的功能有关
* 系统中的过程，会对与价值有关的操作数进行操控，并以此产生利益

### 内部功能 <a href="#nei-bu-gong-neng" id="nei-bu-gong-neng"></a>

专注于系统对外展现的主要功能，也就是会对与价值有关的操作数进行创建、销毁、或影响的那个过程

| 主要内部操作数   | 主要内部过程      |
| --------- | ----------- |
| tcp 网络请求  | 接收          |
| c# 可识别的请求 | 写入 Response |
| tcp 网络    | 格式化         |

**如何找到内部过程**

首先找到对外展现的功能，对外展现的功能里面必然包含一个操作数对象，这个操作数对象在内部必然会经过若干个过程的影响，最后实现了整体的功能

所以和最有价值的操作数对象相关的内部过程就可以提炼出来，形成一连串的动作，然后形成价值通路

比如电商系统中，核心的功能是完成用户购物，与价值有关的操作数是订单对象

从外部展现来看是用户创建订单，订单发货

从内部来看就会围绕订单对象，创建订单，确认订单，订单打通，订单发货，订单签收

### 功能交互与价值通路 <a href="#gong-neng-jiao-hu-yu-jia-zhi-tong-lu" id="gong-neng-jiao-hu-yu-jia-zhi-tong-lu"></a>

功能架构：过程之间共享、或交互的操作数 = 功能交互功能与功能交互，合起来构成功能架构

价值通路：功能架构中包含价值通路，使得价值通路可以沉着这条通路而传递。利益就是沿着这条通路向下进行的，并最终演化为价值

![](https://3083743005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8gwpNo3eyzHkX0O40HRA%2Fuploads%2FMoQ9HQJ6VNY1priA75K8%2F264.jpg?alt=media\&token=bff46510-7f2c-413a-9c3d-72bae3b6e157)

**不在价值通路上的东西**

* 形式实体，形式是某个功能的工具，不在功能架构之内
* 对外展现的次要功能、提供支持的过程和操作数
* 对良好的外部功能起不到涌现作用的过程及操作数
* 对系统起到支撑作用的其它过程和形式

**次要外部功能及内部功能**

必须展现出与价值有关的主要功能，以体现该系统存在的意义，除此之外，它还可能展现出一些与价值有关的次要功能

![](https://3083743005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8gwpNo3eyzHkX0O40HRA%2Fuploads%2FBos8Fx8nQvzdCkVO48T9%2F265.jpg?alt=media\&token=8935bd2f-48bd-457a-883e-b46e463109ac)

### 系统架构 <a href="#xi-tong-jia-gou" id="xi-tong-jia-gou"></a>

![](https://3083743005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8gwpNo3eyzHkX0O40HRA%2Fuploads%2Fp548oun6VYpQg3e9o7lV%2F266.jpg?alt=media\&token=16e3297b-0c58-4b7d-9509-7c34ea4dbf87)

这是一个形式结构，SERVER 是形式实体

![](https://3083743005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8gwpNo3eyzHkX0O40HRA%2Fuploads%2FXm9PHHcSbktCsHntpSZA%2F267.jpg?alt=media\&token=09ff858f-fc82-4cbe-8421-a06e02cd1dc3)

这是功能架构，接收是一个过程，C#可识别的请求信息是一个操作数对象

架构是形式结构和功能架构的结合

![](https://3083743005-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8gwpNo3eyzHkX0O40HRA%2Fuploads%2FDAmVIPjkwpmk6YPvDAGu%2F268.jpg?alt=media\&token=60b77576-1c8e-4edd-999f-57d43ce0884c)

这是一个动静结合的系统架构，既会告诉你系统对外的一些功能和价值是如何实现的，同时也会告诉你它有哪些内部的实体来满足的

**总结**

* 系统架构由功能架构与形式元素及形式架构相结合而成
* 系统架构是通过系统结构和行为的组合使系统提供功能
* 功能就是系统的顶层过程，系统架构（结构-行为组合）用于支持系统执行其顶层过程，进而使系统实现其功能为客户创造价值

**架构模式**

模式：描述的是一种关系（类与类的关系、组件与组件的关系），并且这种关系是可复用的！

特定上下文：说明这种关系的适用场景是有限制的，只能在特定场景下能适用！

常见问题：说明这种关系是解决某个问题或某类问题的解决方案。

* Layered pattern
* Client-server pattern
* Master-slave pattern
* Pipe-filter pattern
* Broker pattern
* Peer-to-peer pattern
* Event-bus pattern
* Model-view-controller pattern
* Blackboard pattern
* Interpreter pattern

**作业**

在 1.1 的作业中，你将你认识的那个系统进行了形式上的分解。

请进一步思考，该系统对外提供的功能是通过什么样的价值通路实现的？

请画出该系统的价值通路（通过功能架构图来体现价值通路）。

把功能架架构 与1.1中的形式相结合，形成架构图，请画出该系统的架构图。
