.NET 云原生架构师训练营(对象过程建模)--学习笔记
目录
- UML
- OPM
- OPM优化
UML
1997年发布UML标准
| 主要域 | 视图 | 图 | 主要概念 |
|---|---|---|---|
| 结构 | 静态视图 | 类图 | 类、关联、泛化、依赖关系、实现、接口 |
| 用例视图 | 用例图 | 用例、参与者、关联、扩展、包括、用例泛化 | |
| 实现视图 | 构件图 | 构件、接口、依赖关系、实现 | |
| 部署视图 | 部署图 | 节点、构件、依赖关系、位置 | |
| 动态 | 状态机视图 | 状态机图 | 状态、事件、转换、动作 |
| 活动视图 | 活动图 | 状态、活动、完成转换、分叉、结合 | |
| 交互图 | 顺序图 | 交互、对象、消息、激活 | |
| 协作图 | 协作、交互、协作角色、消息 |
UML 用例建模

图中有多个用例,每个用例有一个参与者,以及一个用例名称
用例是一个站在使用者的角度,他会在这个系统上做什么事情,这个事情可以称为一个用例
用户通过这个系统做成了一件事情,这是以目标为导向的,比如用户通过ATM机取钱,那么取钱就称为一个用例
用例更多的是涉及到用户和系统之间的交互
为了后期更加详细的设计,需要将用例图拆分为文档
| 内容 | 描述 |
|---|---|
| 用例名称 | 报名活动 |
| 用例编号 | |
| 行为角色 | 访客、会员 |
| 简要说明 | 访客只能查看、会员可报名 |
| 前置条件 | 用户已经通过活动列表进入具体活动介绍页面;用户已经登录 |
| 后置条件 | 报名按钮显示为:已报名 |
| 流程图 |
UML 会使用多种图来展示用例内部详细的过程,但是没办法进行层次缩放,这是使用 UML 做系统设计会存在的问题
OPM
Object Process Methodology
- 系统视角
- 概念建模
- 系统分解
系统视角
任何系统都可以从两方面来看
- 结构(静态)
- 行为(动态)
概念建模

在对象和对象之间建立抽象的关系

过程影响对象
系统分解
- 从对象和功能开始建模
- 对象的状态
- 用过程链接联系对象
从对象和功能开始建模
对象是存在或可能存在的事物
过程是变换对象的事物
对象或过程都是一个事物

举一个导购分享的例子,首先导购生成分享链接会产生一条分享链接,这就是我们所说的对象
接着点击分享链接,分享链接作为这个过程的输入,点击链接会创建分享关系

抽取对象的过程中需要注意正方形填的是名词,是一个对象;圆形填的是动词,是一个过程
过程一定会影响对象,使得对象的状态发生一些改变,或者包括创建和销毁这个对象,同样的,一个对象会作为另外一个过程的输入
对象的状态
一段时间内对象可能处于一种状态或者情形

状态使用圆角矩形,分享链接有两种状态,有效的和无效的,通过状态与过程进行交互,只有链接是有效的才可以点击,如果是无效的需要重新生成
这个时候我们需要多一个请求分享链接的过程,这个过程与生成分享链接的过程是不可以连接的
过程与过程之间不可以连接,连接只能发生在一个对象与一个过程之间,所以这个图可能画错了,我们需要调整如下

状态的检查应该放到点击链接的时候,链接如果是有效的,才会生成分享关系
链接状态是分享链接的一个属性,通过属性连接(两个三角形中间实心的图标)
请求分享链接的时候一定有一个导购的对象,分享链接属于导购的一个属性
分享链接的状态分为已生成和未生成,请求分享链接如果未生成,则需要生成分享链接,双向的
用过程链接联系对象
- 过程链接
- 结构链接
- 事件链接
- 行为控制

过程链接:将一个对象(或其状态)与一个过程联系起来,比如分享链接与请求分享链接的联系
结构链接:将一个对象与另一个对象(或者一个过程与另一个过程联系起来),比如请求分享链接与点击链接的联系
过程链接

主体链接:系统的参与者,用户主导了整个过程,比如导购和请求分享链接的联系,客户和点击链接的联系
手段(支持)链接:提供手段和支持,比如链接提供器和生成链接的联系
两者的区别是一类是主体对象,一类是支持对象
变换链接:过程就是用来改变对象的状态,影响一个对象的状态或者吸收一个对象,比如分享链接和生成链接的联系
过程链接只能建立再对象和过程上
结构链接
结构链接是建立在对象与对象之间,过程与过程之间,它们之间往往拥有一种持久的关系,属性、继承、组成等等
- 结构关系
- 组成关系

属性:分享链接是导购的属性,链接状态是分享链接的属性,通过属性连接建立联系
继承:零售客户和分销商客户继承客户,浏览器点击和APP点击继承点击链接
事件链接
在结构/过程链接之上添加 e 标注,代表是偶发的

Server 支持请求响应这件事情是偶发的,并不是一直有的,所以可以加上e标注
行为控制
- 布尔对象
- 条件 if
- 或(OR)/ 与(XOR)

布尔对象:建立在支持对象之上,但是会有一个判断,比如我们获取链接的时候会有一个判断,如果没有链接则生成链接,有链接则返回
条件 if:和事件链接相似,比如在链接状态有效的时候创建分享关系,添加 c 标注,无效的时候异常退出
或(OR)/ 与(XOR):或表示走一个或者多个都可以,亦或表示只能走一个,比如在是否有链接的两个选项中间加两条弧线,表示只能选一个;如果是或则画一条弧线
过程链接与结构链接集合

OPM优化
- 抽象与细化
- 过程与判定
- 复杂度管理
抽象与细化

抽象与细节之间会有一个继承关系,导购继承用户,分享链接抽象为推广
员工,客户也可以导购;展示二维码也可以作为一种分享链接
过程与判定
很多时候没办法确定是一个对象还是一个过程,最简单的方式就是根据是动词还是名词判断,以及根据过程有没有改变对象的状态判断
复杂度管理
- 状态显示与状态隐藏
- 展开与折叠(放大与缩小)
- 端口折叠
状态显示与状态隐藏
人为的控制是否要显示状态,比如链接状态
展开与折叠(放大与缩小)
把图画的层次高一点则简单易懂,画的层次毕竟低一点则复杂一些,但是表现会更加清晰,可以对它们进行切割

如果把分享放大,则可以在里面画更加细节的过程,同时可以在获取链接里面再画更加细节的过程

我们也可以在多张图中进行缩放,比如获取链接放到第二个图中

端口折叠

比如在是否有链接的条件 if 可以折叠起来,直接在外部通过两个端口有和无来和其他对象过程建立链接
作业
尝试把自己之前那个系统架构图里面的过程进入展下,一直向下到不可分割的原子级别(可以到某个类级别)
课程链接
https://appsqsyiqlk5791.h5.xiaoeknow.com/v1/course/video/v_5f39bdb8e4b01187873136cf?type=2

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。
.NET 云原生架构师训练营(对象过程建模)--学习笔记的更多相关文章
- .NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记
目录 什么是软件架构 软件架构的基本思路 单体向分布式演进.云原生.技术中台 1.1 什么是软件架构 1.1.1 什么是架构? Software architecture = {Elements, F ...
- .NET 云原生架构师训练营(权限系统 RGCA 架构设计)--学习笔记
目录 项目核心内容 实战目标 RGCA 四步架构法 项目核心内容 无代码埋点实现对所有 API Action 访问控制管理 对 EF Core 实体新增.删除.字段级读写控制管理 与 Identity ...
- .NET 云原生架构师训练营(建立系统观)--学习笔记
目录 目标 ASP .NET Core 什么是系统 什么是系统思维 系统分解 什么是复杂系统 作业 目标 通过整体定义去认识系统 通过分解去简化对系统的认识 ASP .NET Core ASP .NE ...
- .NET 云原生架构师训练营(设计原则与模式)--学习笔记
在复杂系统的架构设计中引入设计原则与模式,能够极大降低复杂系统开发.和维护的成本 目录 几个问题 为什么要学习设计模式 优良架构设计的具体指标 理解复杂系统 面向对象思想(指导复杂系统的分析.设计.实 ...
- .NET 云原生架构师训练营(系统架构)--学习笔记
目录 对外展现的功能 内部功能 功能交互与价值通路 系统架构 目标 认识系统的价值通路 认识功能架构,通过把功能结构与形式结构结合来描述系统架构 受益原则 好的架构必须使人受益,要想把架构做好,就要专 ...
- .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 聚合)--学习笔记
2.5.5 MongoDB -- 聚合 排序 索引类型 创建索引 排序 // 升序 db.getCollection('author').find({}).sort({"age": ...
- .NET 云原生架构师训练营(模块二 基础巩固 RabbitMQ Masstransit 详解)--学习笔记
2.6.7 RabbitMQ -- Masstransit 详解 Consumer 消费者 Producer 生产者 Request-Response 请求-响应 Consumer 消费者 在 Mas ...
- .NET 云原生架构师训练营(模块二 基础巩固 敏捷开发)--学习笔记
2.7.1 敏捷开发 敏捷介绍 敏捷的起源 敏捷软件开发宣言 敏捷开发十二原则 生命周期对比 敏捷开发的特点 敏捷的发展 敏捷的核心 敏捷的起源 2001年,17个老头子在一起一边滑雪,一边讨论工作, ...
- .NET 云原生架构师训练营(ASP .NET Core 整体概念推演)--学习笔记
演化与完善整体概念 ASP .NET Core 整体概念推演 整体概念推演到具体的形式 ASP .NET Core 整体概念推演 ASP .NET Core 其实就是通过 web framework ...
随机推荐
- 如何在 ShardingSphere 中开发自己的 DistSQL
在<DistSQL:像数据库一样使用 Apache ShardingSphere>和<SCTL 涅槃重生:投入 RAL 的怀抱>中,已经为大家介绍了 DistSQL 的设计初衷 ...
- 【.NET 与树莓派】MPD 的 Mini-API 封装
在前面的水文中,一方面,老周向各位同学介绍了通过 TCP 连接来访问 MPD 服务:另一方面,也简单演示了 ASP.NET Core 的"极简 API"(Mini API).本篇老 ...
- APIO2020 打铁记
Day (-3) - 2020.8.11 马上要 APIO 了,不管三七二十一先刷一套历年的 APIO 再说. 花了 3h 写了 APIO2019,爆零150左右,然后查看了一下去年的分数线,Cu 1 ...
- 洛谷 P4002 - [清华集训2017]生成树计数(多项式)
题面传送门 神题. 考虑将所有连通块缩成一个点,那么所有连好边的生成树在缩点之后一定是一个 \(n\) 个点的生成树.我们记 \(d_i\) 为第 \(i\) 个连通块缩完点之后的度数 \(-1\), ...
- Codeforces 1137F - Matches Are Not a Child's Play(LCT)
Codeforces 题面传送门 & 洛谷题面传送门 考虑将一个点 \(x\) 的编号变为当前所有点编号最大值 \(+1\) 会对每个点的删除时间产生怎么样的影响.由于编号最大的点肯定是最后一 ...
- NOI 2008 志愿者招募
NOI 2008 志愿者招募 考虑用 $ p_i $ 表示第 $ i $ 天实际招收的人数,我们假设我们有三种志愿者,分别是 $ 1\to 2,1 \to 3 , 2\to 3 $ ,我们招手的人数分 ...
- Codeforces 1542E2 - Abnormal Permutation Pairs (hard version)(DP)
upd on 2021.7.7:修了个 typo Codeforces 题目传送门 & 洛谷题目传送门 首先考虑怎样处理"字典序小"这个问题,按照字典序比大小的套路,我们可 ...
- fastq文件基本信息统计工具
之前写的一个小工具,写的很简陋,名字取的也很随意就叫skr,哈哈.主要是fq转fa.合并多个染色体的vcf文件等,功能不多(主要是C写起来太操蛋了T_T),通常我也只用来统计fastq文件信息: 这里 ...
- mysql—MySQL数据库中10位时间戳转换为标准时间后,如何对标准时间进行加减X天处理
在这篇的缘由:问题:"FROM_UNIXTIME(timeline,'%Y-%m')"的结果(2020-06)做月份增加1月或者减少1月的计算处理,想着直接在结果上+1但是,结果为 ...
- spl_autoload_register的作用
spl_autoload_register的作用 当php实例化一个类的时候,这个类如果在另外的文件,那么不用include或require的时候就会报错,为了解决这个问题,可以用spl_autolo ...