目录

  • 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. 定时任务注解@Scheduled

    概述 要使用@ Scheduled注解,首先需要在启动类添加@ EnableScheduling,启用Spring的计划任务执行功能,这样可以在容器中的任何Spring管理的bean上检测@ Sche ...

  2. 开源一个简单的react-native 菜单栏抽屉组件,带缩放效果

    效果如图所示,源码地址:https://github.com/pofabs/PoSideMenu

  3. 洛谷 P3267 - [JLOI2016/SHOI2016]侦察守卫(树形 dp)

    洛谷题面传送门 经典题一道,下次就称这种"覆盖距离不超过 xxx 的树形 dp"为<侦察守卫模型> 我们考虑树形 \(dp\),设 \(f_{x,j}\) 表示钦定了 ...

  4. 【ThermoRawFileParser】质谱raw格式转换mgf

    众所周知,Proteowizard MSconvert用于质谱原始数据的格式转换,但主要平台是windows,要想在Linux上运行需要打Docker或Wine,对于普通用户来说还是很困难的,想想质谱 ...

  5. python项目——新闻管理系统

    DAO(Data Access Object) 数据访问对象是一个面向对象的数据库接口 控制台的输入输出都是再app.py里面完成的  mysql_db.py import mysql.connect ...

  6. PHP socket Workerman实用的php框架

    PHP socket Workerman是一款开源高性能异步PHP socket即时通讯框架. 非常好用的一款框架,可以支持在线聊天,长连接等 用法 官方 https://www.workerman. ...

  7. c#年份筛选

    年份: <script type="text/javascript" src="http://www.shicishu.com/down/WdatePicker.j ...

  8. Flink(一)【基础入门,Yarn、Local模式】

    目录 一.介绍 Spark | Flink 二.快速入门:WC案例 pom依赖 批处理 流处理 有界流 无界流(重要) 三.Yarn模式部署 安装 打包测试,命令行(无界流) Flink on Yar ...

  9. 【Reverse】DLL注入

    DLL注入就是将dll粘贴到指定的进程空间中,通过dll状态触发目标事件 DLL注入的大概流程 https://uploader.shimo.im/f/CXFwwkEH6FPM0rtT.png!thu ...

  10. Java Jar包压缩、解压使用

    什么是jar包JAR(Java Archive)是Java的归档文件,它是一种与平台无关的文件格式,它允许将许多文件组合成一个压缩文件. 如何打/解包使用jdk/bin/jar.exe工具,配置完环境 ...