.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 ...
随机推荐
- [bzoj1106]立方体大作战
先贪心,容易发现如果两个点中间没有点对,那么一定可以先把这两个点消掉分析一下,就可以发现这样两个点的答案就是这两个点对中间不成对的点数量扫描过去,线段树维护每一个点的权值(是否会被算入答案)即可 1 ...
- 前端jsdebug调试
前端如何像java一样的debug呢? 1.在js页面加入debugger next: function(){ debugger var type=this.quiz[this.progress].s ...
- 【Microsoft Azure 的1024种玩法】七.Azure云端搭建部署属于自己的维基百科
[简介] MediaWiki是全球最著名的开源wiki程序,运行于PHP+MySQL环境.MediaWiki从2002年2月25日被作为维基百科全书的系统软件,并有大量其他应用实例.MediaWiki ...
- Redis基本数据类型底层数据结构
Redis数据类型底层数据结构 Redis目前基本的数据类型有String.List.Set.ZSet.Hash五种,首先Redis是C语言开发的,所以底层就是用C语言封装数据结构或者C语言本身提供的 ...
- Java开发最实用最好用的11个技术网站
作为一个Java开发者,学习最新技术和关注行业内容是你不断提升自我的有效手段.因此,我会特别关注一些质量高口碑好的Java技术网站,在这里分享给大家. 1.Stackoverflow Stackove ...
- CF1574D The Strongest Build
考虑到有\(m\)个限制,可以考虑\(m+1\)个最大的答案,这样可以利用鸽笼原理得到答案. 这是一般做法. 但是这样的题目,我们发现\(n\)个操作都是独立的. 那么我们可以全部都选取最大,并以此调 ...
- MongoDB 安装/启动/基本操作命令
1.MongoDB简介 MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系型数据库和非关系数据库之间的 ...
- [R报错] Kruskal-wallis test 所有组的层次都必需是有限的
做了个两组间的Kruskal-wallis检验,出现如下错误: 对应的英文版本错误为: All group levels must be finite is.finite(data$type)一下果然 ...
- 错误笔记: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) E: Unable to lock the administration di
亲测可用 --jack alexander@alexander-virtual-machine:~$ sudo apt-get install -y httpdE: Could not get loc ...
- 禁止点击、禁止button触发【c#】
bts.Attributes["onclick"] = "return false; ";