点击上方“DotNet NB”关注公众号

回复“1”获取开发者路线图

学习分享 丨作者 / 郑 子 铭

这是DotNet NB 公众号的第176篇原创文章

目录

  • 对外展现的功能

  • 内部功能

  • 功能交互与价值通路

  • 系统架构

目标

  • 认识系统的价值通路

  • 认识功能架构,通过把功能结构与形式结构结合来描述系统架构

受益原则

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

对外展现的功能

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

推荐阅读:

《Kubernetes全栈架构师(Kubeadm高可用安装k8s集群)--学习笔记》

《.NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记》

《.NET Core开发实战(第1课:课程介绍)--学习笔记》

点击下方卡片关注DotNet NB

一起交流学习

▲ 点击上方卡片关注DotNet NB,一起交流学习

请在公众号后台

回复 【路线图】获取.NET 2021开发者路线图

回复 【原创内容】获取公众号原创内容

回复 【峰会视频】获取.NET Conf开发者大会视频

回复 【个人简介】获取作者个人简介

回复 【年终总结】获取作者年终总结

回复 加群加入DotNet NB 交流学习群

长按识别下方二维码,或点击阅读原文。和我一起,交流学习,分享心得。

.NET 云原生架构师训练营(系统架构)--学习笔记相关推荐

  1. 什么是系统架构师,系统架构师应具备哪些能力?

    目录 什么是系统架构师? 系统架构师应具备哪些能力? 什么是系统架构师? 系统架构师是一个既需要掌控整体,又需要洞悉局部瓶颈,并依据具体的业务场景给出解决方案的团队领导型人物.一个架构师需要有足够的想 ...

  2. 架构师修炼之道学习笔记

    软件架构师的角色 架构师的职责 软件架构的组成 模块结构存在于设计阶段,组件连接器结构在软件运行时出现,分配结构展示模块元素与组件连接器元素之间,以及这些元素与现实的物理元素之间的协同与响应关系 软件 ...

  3. .NET 云原生架构师训练营(模块二 基础巩固 日志)--学习笔记

    2.2.2 核心模块--日志 ILogger 的使用 日志的 ID 日志的分类 日志的级别 LoggerProvider 日志的最佳实践 .NET Core 和 ASP.NET Core 中的日志记录 ...

  4. .NET 云原生架构师训练营(模块二 基础巩固 引入)--学习笔记

    2.1 引入 http协议 web server && web application framework .net 与 .net core asp .net core web api ...

  5. .NET 云原生架构师训练营(设计原则设计模式)--学习笔记

    ▲ 点击上方"DotNet NB"关注公众号 回复"1"获取开发者路线图 学习分享 丨作者 / 郑 子 铭 这是DotNet NB 公众号的第180篇原创文章 ...

  6. .NET 云原生架构师训练营(模块二 基础巩固 安全)--学习笔记

    2.8 安全 认证 VS 授权 ASP .NET Core 认证授权中间件 认证 JWT 认证 授权 认证 VS 授权 认证是一个识别用户是谁的过程 授权是一个决定用户可以干什么的过程 401 Una ...

  7. .NET 云原生架构师训练营(模块二 基础巩固 REST RESTful)--学习笔记

    2.3.1 Web API -- REST && RESTful 什么是 REST,什么是 RESTful RESTful API 设计 RESTful 成熟度模型 什么是 REST, ...

  8. .NET 云原生架构师训练营(模块二 基础巩固 配置)--学习笔记

    2.2.3 核心模块--配置 IConfiguration Options ASP.NET Core 中的配置:https://docs.microsoft.com/zh-cn/aspnet/core ...

  9. .NET 云原生架构师训练营(模块二 基础巩固 依赖注入)--学习笔记

    2.2.1 核心模块--依赖注入 什么是依赖注入 .NET Core DI 生命周期 服务设计 服务范围检查 ASP.NET Core 依赖注入:https://docs.microsoft.com/ ...

最新文章

  1. Computing--状态机
  2. IBM存储部分常见配件PN号查询及描述翻译
  3. Linux图形界面与命令行模式切换
  4. 分布式系统概念 | 分布式理论:CAP、BASE
  5. DB2 pureScale在线备份恢复实例1
  6. doxygen相关问题
  7. poj1284:欧拉函数+原根
  8. 怎样通过FineReader 的“文本”窗口检查文本
  9. c 语言编写脚本优化,两周自制脚本语言-第11天 优化变量读写性能
  10. foobar2000转换APE参数设置
  11. leapmotion手势交互引擎
  12. GB2312、GBK汉字字库偏移地址的计算
  13. Android ——游戏开发之文字冒险游戏
  14. 计算机软件系统管理说课,计算机软件系统 说课稿
  15. txt文件的编码结构
  16. 动态规划(dp)的总结
  17. ofdm导频信道估计matlab,OFDM导频信道估计
  18. Udacity数据分析(入门)-探索美国共享单车数据
  19. ffmpeg播放器实现详解 - 快进快退控制
  20. android 高德静态地图api,静态地图-API文档-开发指南-Web服务 API | 高德地图API

热门文章

  1. 把准脉搏 U-Mail邮件系统2014开足马力
  2. 定义命令别名(alias)
  3. Lync-用户-电话号码-更新
  4. 分析android动画模块[转]
  5. qt 快速按行读取文件_这是知识点之Linux下分割文件并保留文件头
  6. Boosting(提升方法)之GBDT
  7. Python基础七(函数)
  8. 4-8 string
  9. wampServer配置WWW根目录遇到的坑
  10. C#构造函数、操作符重载以及自定义类型转换