.NET 云原生架构师训练营(系统架构)--学习笔记
目录
- 对外展现的功能
 - 内部功能
 - 功能交互与价值通路
 - 系统架构
 
目标
- 认识系统的价值通路
 - 认识功能架构,通过把功能结构与形式结构结合来描述系统架构
 
受益原则
好的架构必须使人受益,要想把架构做好,就要专注于功能的涌现,使得系统把它的主要功能通过跨越系统边界的接口对外展示出来
对外展现的功能
ASP .NET Core 的使用者是程序员,最终的受益是老板

上一讲对 ASP .NET Core 的描述是文字性描述,是一种非结构性描述,不是很准确,因为每个人对文字的理解都不一样
ASP .NET Core 对外展现的功能和价值可以主要拆分为两个过程:启动和执行
启动的时候有目标,就是代码;执行的时候有请求和响应
如何描述一个功能

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

功能需要由一个形式来进行承载,有时候我们也称之为工具对象(你的代码)
比如烧水需要一个烧水壶,但是烧水壶没办法提供热水,这个系统通过把水加热给我提供热水
加热是过程,水是操作数对象,通过加热的过程改变了水的温度,实现了整个系统的目标,为我提供热水
这里面我们可以发现加热需要一个工具对象,使用什么进行加热,燃气灶、柴火还是煤气
功能就是通过一个工具对象实施一个过程来改造一个目标操作数对象的一些状态来实现一些目标
ASP .NET Core 对外展现的功能和价值
| 与价值有关的操作数 | 与价值有关的属性及状态 | 与价值有关的过程 | 系统的形式 | 
|---|---|---|---|
| web 请求 | web 请求响应体 | 影响/改变 | 带自托管的 WEB FRAMEWORK | 
- 系统所带来的利益与它对外展现的功能有关
 - 系统中的过程,会对与价值有关的操作数进行操控,并以此产生利益
 
内部功能
专注于系统对外展现的主要功能,也就是会对与价值有关的操作数进行创建、销毁、或影响的那个过程
| 主要内部操作数 | 主要内部过程 | 
|---|---|
| tcp 网络请求 | 接收 | 
| c# 可识别的请求 | 写入 Response | 
| tcp 网络 | 格式化 | 
如何找到内部过程
首先找到对外展现的功能,对外展现的功能里面必然包含一个操作数对象,这个操作数对象在内部必然会经过若干个过程的影响,最后实现了整体的功能
所以和最有价值的操作数对象相关的内部过程就可以提炼出来,形成一连串的动作,然后形成价值通路
比如电商系统中,核心的功能是完成用户购物,与价值有关的操作数是订单对象
从外部展现来看是用户创建订单,订单发货
从内部来看就会围绕订单对象,创建订单,确认订单,订单打通,订单发货,订单签收
功能交互与价值通路
功能架构:过程之间共享、或交互的操作数 = 功能交互功能与功能交互,合起来构成功能架构
价值通路:功能架构中包含价值通路,使得价值通路可以沉着这条通路而传递。利益就是沿着这条通路向下进行的,并最终演化为价值

不在价值通路上的东西
- 形式实体,形式是某个功能的工具,不在功能架构之内
 - 对外展现的次要功能、提供支持的过程和操作数
 - 对良好的外部功能起不到涌现作用的过程及操作数
 - 对系统起到支撑作用的其它过程和形式
 
次要外部功能及内部功能
必须展现出与价值有关的主要功能,以体现该系统存在的意义,除此之外,它还可能展现出一些与价值有关的次要功能

系统架构

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

这是功能架构,接收是一个过程,C#可识别的请求信息是一个操作数对象
架构是形式结构和功能架构的结合

这是一个动静结合的系统架构,既会告诉你系统对外的一些功能和价值是如何实现的,同时也会告诉你它有哪些内部的实体来满足的
总结
- 系统架构由功能架构与形式元素及形式架构相结合而成
 - 系统架构是通过系统结构和行为的组合使系统提供功能
 - 功能就是系统的顶层过程,系统架构(结构-行为组合)用于支持系统执行其顶层过程,进而使系统实现其功能为客户创造价值
 
架构模式
模式:描述的是一种关系(类与类的关系、组件与组件的关系),并且这种关系是可复用的!
特定上下文:说明这种关系的适用场景是有限制的,只能在特定场景下能适用!
常见问题:说明这种关系是解决某个问题或某类问题的解决方案。
- 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中的形式相结合,形成架构图,请画出该系统的架构图。
课程链接
https://appsqsyiqlk5791.h5.xiaoeknow.com/v1/course/video/v_5f39bdb8e4b01187873136cf?type=2

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。
.NET 云原生架构师训练营(系统架构)--学习笔记的更多相关文章
- Java架构师-十项全能学习笔记(1)
		
Java架构师-十项全能学习笔记(1) @Configuration @EnableStateMachine public class OrderStateMachineConfig extends ...
 - 向架构师进军--->系统架构设计基础知识
		
如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 在讲解系统架构设计之前,有必要补充一下架构相关的概念,因此本博文主要讲述架构.架构师 ...
 - Java架构师之路 Spring学习笔记(一) Spring介绍
		
前言 这是一篇原创的Spring学习笔记.主要记录我学习Spring4.0的过程.本人有四年的Java Web开发经验,最近在面试中遇到面试官总会问一些简单但我不会的Java问题,让我觉得有必要重新审 ...
 - .NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记
		
目录 什么是软件架构 软件架构的基本思路 单体向分布式演进.云原生.技术中台 1.1 什么是软件架构 1.1.1 什么是架构? Software architecture = {Elements, F ...
 - IT架构师介绍-软件架构设计学习第一天(非原创)
		
文章大纲 一.架构师定义二.架构师分类与具备能力三.研发人员发展的技术路线四.架构师知识体系五.参考文章 一.架构师定义 什么是架构师,这个聊架构话题时永恒的问题.每个公司对架构师的定位也有所 ...
 - 打造云原生大型分布式监控系统系列文章-腾讯工程师roc
		
附上本系列文章链接 打造云原生大型分布式监控系统(一): 大规模场景下 Prometheus 的优化手段 打造云原生大型分布式监控系统(二): Thanos 架构详解 打造云原生大型分布式监控系统(二 ...
 - 架构师之路->架构师思维的培养
		
公司的CMS(综合赋码管理系统)是WINFORM的CS架构.这套系统的架构师换了3届,到现在已经几年没有架构师了.本来入职时,岗位目标就是这个“自动化架构师”. 后来和领导达成共识先争取成为储备架构师 ...
 - .NET 云原生架构师训练营(权限系统 RGCA 架构设计)--学习笔记
		
目录 项目核心内容 实战目标 RGCA 四步架构法 项目核心内容 无代码埋点实现对所有 API Action 访问控制管理 对 EF Core 实体新增.删除.字段级读写控制管理 与 Identity ...
 - .NET 云原生架构师训练营(建立系统观)--学习笔记
		
目录 目标 ASP .NET Core 什么是系统 什么是系统思维 系统分解 什么是复杂系统 作业 目标 通过整体定义去认识系统 通过分解去简化对系统的认识 ASP .NET Core ASP .NE ...
 
随机推荐
- 最简单的Python3启动浏览器代码
			
#encoding=utf-8 from selenium import webdriver import time from time import sleep dr = webdriver.F ...
 - HDU 6755 - Fibonacci Sum(二项式定理+推式子)
			
题面传送门 其实是一道还好的题罢,虽然做了我 2147483647(bushi,其实是 1.5h),估计也只是因为 HDU 不支持数据下载所以错误总 debug 出来 首先看到 \(10^9+9\) ...
 - 3D-DNA 挂载染色体
			
3D-DNA是一款简单,方便的处理Hi-C软件,可将contig提升到染色体水平.其githup网址:https://github.com/theaidenlab/3d-dna 3D-DNA流程简介 ...
 - Linux中gz文件操作遇到的一些技巧和坑
			
目录 不解压情况下获取gz超大文件的前/后几行? Perl读入gz文件操作? 不能直接通过wc -l 来统计gz文件的行数 前提是gz文件超大,如上百G,肯定不能直接解压来做. 不解压情况下获取gz超 ...
 - MetaboAnalyst的多组学分析
			
MetaboAnalyst是做代谢的R包,功能十分强大.也开发了web版本,代谢组学的分析这里不介绍,主要讲讲它开发的多组学分析的相关内容. 既然是做代谢的工具,即使是增加了多组学内容,肯定也是以代谢 ...
 - R语言与医学统计图形-【17】ggplot2几何对象之热图
			
ggplot2绘图系统--heatmap.geom_rect 这里不介绍更常见的pheatmap包. 1.heatmap函数 基础包. data=as.matrix(mtcars) #接受矩阵 hea ...
 - 一站式Flink&Spark平台解决方案——StreamX
			
大家好,我是独孤风.今天为大家推荐的是一个完全开源的项目StreamX.该项目的发起者Ben也是我的好朋友. ****什么是StreamX,StreamX 是Flink & Spark极速开发 ...
 - R语言学习记录(一)
			
(R基础) 对象:什么是对象呢,其实就是一个名称而已,在R中存储的数据 就是一个R对象 a <- 1 ###其中'<-'表示的是一个赋值符号 这句话表示的是,将1赋值给a b <- ...
 - 零基础学习java------day12------数组高级(选择排序,冒泡排序,二分查找),API(Arrays工具类,包装类,BigInteger等数据类型,Math包)
			
0.数组高级 (1)选择排序 它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的起始位置 ...
 - CRLF漏洞浅析
			
部分情况下,由于与客户端存在交互,会形成下面的情况 也就是重定向且Location字段可控 如果这个时候,可以向Location字段传点qqgg的东西 形成固定会话 但服务端应该不会存储,因为后端貌似 ...