.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 ...
随机推荐
- IDEA:Git stash 暂存分支修改的代码
IDEA:Git stash 暂存分支修改的代码 场景:当我们正在master分支开发新功能的时候,突然接到一个任务发现线上出现了一个紧急的BUG需要修复,由于没有打新分支做这部分新需求,这时正做到半 ...
- 使用postman对elasticsearch接口调用
post 新增 get 查询 put更新 post http://127.0.0.1:9200/index4/type1 {"node":0} { "_index&quo ...
- 解决FastJson中"$ref重复引用"的问题方法
对象的引用重复使用造成了重复引用问题,Fastjson默认开启引用检测将相同的对象写成引用的形式: 1 2 3 4 5 {"$ref": "$"} // 引用根 ...
- myeclipse激活、破解教程
myeclipse安装注意事项 首先要下载jdk 配置jdk的环境变量 如果1和2 都打不开说明没有下载jdk文件,点击下载就可以了,点击1的时候会出现要求下载的界面,直接下载就可以了...下载完成之 ...
- Python中关于join函数的陷阱?
目录 说明 数据说明 正确示例 错误示例 解决办法 说明 最近在用Python的join函数连接多个列表时,出现了如下两个错误,即合并类型不一致.折腾了很久才找到原因,真是基础不牢,地动山摇. Typ ...
- 取gridview中textbox的值【C#】
<asp:GridView ID="gridView" runat="server" OnRowCommand="gridView_RowCom ...
- 学习java 6.29
今天是学习Java的第一天. 学习内容:了解了JDK的下载和安装: 学会了如何配置Path环境变量及安装eclipse: 执行了HelloWorld案例: 在Java中关键字需要小写,Java中最基本 ...
- Set、Map、WeakSet 和 WeakMap 的区别
先总结: Set1. 成员不能重复2. 只有健值,没有健名,有点类似数组.3. 可以遍历,方法有add, delete,hasweakSet 1. 成员都是对象 2. 成员都是弱引用,随时可以消失. ...
- 事务(@Transactional注解)的用法和实例
参数 @Transactional可以配制那些参数及以其所代表的意义: 参数 意义 isolation 事务隔离级别 propagation 事务传播机制 readOnly 事务读写性 noRollb ...
- redis入门到精通系列(二):redis操作的两个实践案例
在前面一篇博客中我们已经学完了redis的五种数据类型操作,回顾一下,五种操作类型分别为:字符串类型(string).列表类型(list).散列类型(hash).集合类型(set).有序集合类型(so ...