目录

  • 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 云原生架构师训练营(对象过程建模)--学习笔记的更多相关文章

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

    目录 什么是软件架构 软件架构的基本思路 单体向分布式演进.云原生.技术中台 1.1 什么是软件架构 1.1.1 什么是架构? Software architecture = {Elements, F ...

  2. .NET 云原生架构师训练营(权限系统 RGCA 架构设计)--学习笔记

    目录 项目核心内容 实战目标 RGCA 四步架构法 项目核心内容 无代码埋点实现对所有 API Action 访问控制管理 对 EF Core 实体新增.删除.字段级读写控制管理 与 Identity ...

  3. .NET 云原生架构师训练营(建立系统观)--学习笔记

    目录 目标 ASP .NET Core 什么是系统 什么是系统思维 系统分解 什么是复杂系统 作业 目标 通过整体定义去认识系统 通过分解去简化对系统的认识 ASP .NET Core ASP .NE ...

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

    在复杂系统的架构设计中引入设计原则与模式,能够极大降低复杂系统开发.和维护的成本 目录 几个问题 为什么要学习设计模式 优良架构设计的具体指标 理解复杂系统 面向对象思想(指导复杂系统的分析.设计.实 ...

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

    目录 对外展现的功能 内部功能 功能交互与价值通路 系统架构 目标 认识系统的价值通路 认识功能架构,通过把功能结构与形式结构结合来描述系统架构 受益原则 好的架构必须使人受益,要想把架构做好,就要专 ...

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

    2.5.5 MongoDB -- 聚合 排序 索引类型 创建索引 排序 // 升序 db.getCollection('author').find({}).sort({"age": ...

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

    2.6.7 RabbitMQ -- Masstransit 详解 Consumer 消费者 Producer 生产者 Request-Response 请求-响应 Consumer 消费者 在 Mas ...

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

    2.7.1 敏捷开发 敏捷介绍 敏捷的起源 敏捷软件开发宣言 敏捷开发十二原则 生命周期对比 敏捷开发的特点 敏捷的发展 敏捷的核心 敏捷的起源 2001年,17个老头子在一起一边滑雪,一边讨论工作, ...

  9. .NET 云原生架构师训练营(ASP .NET Core 整体概念推演)--学习笔记

    演化与完善整体概念 ASP .NET Core 整体概念推演 整体概念推演到具体的形式 ASP .NET Core 整体概念推演 ASP .NET Core 其实就是通过 web framework ...

随机推荐

  1. 从头带你撸一个Springboot Starter

    我们知道 SpringBoot 提供了很多的 Starter 用于引用各种封装好的功能: 名称 功能 spring-boot-starter-web 支持 Web 开发,包括 Tomcat 和 spr ...

  2. CF1004D Sonya and Matrix

    不要想当然. 考虑到我们一定有存在个数为\(4\)的倍数的数. 否则第一个不是的数即为\(x\). 那么我们设\(b\)为所有的数的最大值. 那么显然有\(|n - x| + |m - y| = b\ ...

  3. Codeforces 1383C - String Transformation 2(找性质+状压 dp)

    Codeforces 题面传送门 & 洛谷题面传送门 神奇的强迫症效应,一场只要 AC 了 A.B.D.E.F,就一定会把 C 补掉( 感觉这个 C 难度比 D 难度高啊-- 首先考虑对问题进 ...

  4. 洛谷 P3700 - [CQOI2017]小Q的表格(找性质+数论)

    洛谷题面传送门 又是一道需要一些观察的数论 hot tea-- 注意到题目中 \(b·f(a,a+b)=(a+b)·f(a,b)\) 这个柿子长得有点像求解 \(\gcd\) 的辗转相除法,因此考虑从 ...

  5. UOJ 422 - 【集训队作业2018】小Z的礼物(Min-Max 容斥+轮廓线 dp)

    题面传送门 本来说要找道轮廓线 \(dp\) 的题目刷刷来着的?然后就找到了这道题. 然鹅这个题给我最大的启发反而不在轮廓线 \(dp\),而在于让我新学会了一个玩意儿叫做 Min-Max 容斥. M ...

  6. fping (比ping更强大的ping工具)

    Fping程序类似于ping(ping是通过ICMP(网络控制信息协议InternetControl Message Protocol)协议回复请求以检测主机是否存在).Fping与ping不同的地方 ...

  7. 汽车C2M模式综述

  8. vs2019 16.8更新之后的 C++20 协程co_yield用法

    由于搜索出来的帖子,都是老版本的实验协程,很多老的代码已经失去参考性,并且很复杂,所以就自己研究了一下. 1 #include <iostream> 2 #include <coro ...

  9. iOS 的文件操作

    直接上操作 效果:将一张图片写入文件 (图片本身已经在Assets.xcassets里面了) 1.获取当前app的沙盒路径 NSString *documentPath = NSSearchPathF ...

  10. 【编程思想】【设计模式】【结构模式Structural】代理模式Proxy

    Python版 https://github.com/faif/python-patterns/blob/master/structural/proxy.py #!/usr/bin/env pytho ...