摘要:时序图是统一模型语言UML(Unified Model Language)中一种用来表示实体间交互关系的图。

1 前言

在定义系统间接口或模块间接口时,时序图使用起来非常方便,工作中经常涉及要与第三方系统协商定义接口,或者定义系统内多模块间接口的情况,经常会看到很多时序图。有的时序图画的很漂亮,很好的帮助读者准确理解业务和实现方法,而有的时序图则读起来人云山雾罩,痛苦不已。本文不打算再说一遍时序图的结构和步骤,只想说明时序图中经常遇到主要问题,并许下一个美好的愿望:希望以后的工作中再也不要遇到难读的时序图。

时序图是统一模型语言UML(Unified Model Language)中一种用来表示实体间交互关系的图,英文Sequence Diagram,有的人把它称为序列图、顺序图、循序图,个人习惯于称为时序图,下文都以这个名字来称呼。

画时序图的工具非常多,从早期的Rational Rose、Sybase Power Designer、Visio,到Enterprise Architect、StarUML,甚至用Typora来画Markdown风格时序图也不错,再到现在按公司的要求换用亿图图示Edraw,这些工具都不错,稍微适应下就能画出漂亮的时序图了。

值得推荐的是,公司CloudDesign在线设计工具提供的CloudModeling绘图工具用起来也相当舒服,既便于在团队分享,又提供了Word插件便于导入设计文档,如果修改了时序图也只需要在word文档中更新一下就自动刷新了,非常方便,强烈推荐使用。网址:https://clouddragon.huawei.com/uadp/home

下面进入正题。

2 关键点1:必须明确上下文

掌握了这一点就成功了一大半,没有做到这一点就基本画不清楚了。

为什么这句话说这么狠?不就画个时序图嘛,关上下文什么事?因为看过太多让人痛恨的时序图都栽在这个问题上。

我们知道时序图中参与交互的实体只有两类,即角色(Actor)和对象(Object),如果连交互的实体都不能明确的定义和达成一致,忽东忽西,忽大忽小,具体交互的流程怎样可能说清楚,使所有读者和写作者达成一致呢。

为说明这个问题,以车联网的场景举个例子,比如远程控制特性的交互时序图。

车辆授权交互时序图

远程开车窗交互时序图

远程开车门交互时序图

如图所示,我们看到交互实体中出现了多个类似但又不同的表述,例如“车主”、“被授权用户”、“被分享用户”这一组,“手机App”和“车主App”这一组,“TSP平台”、“TSP系统”和“车云”这一组,而在车辆方面,有时称为“车辆”这么大的粒度,有时又称细分为“TBox”、“车身控制模块”、“PEPS”。

这里仅仅举例了3个交互时序图,而一个复杂系统往往会出现几十上百个,当每个时序图的作者都随心所欲的对交互实体进行命名时就会出现极其混乱的局面,最终貌似每个时序图都看起来很有道理,放在一起看却难以准确理解,使读者抓狂。

解决办法:很简单,画出一个上下文图,把所有时序图中涉及的交互实体都放进去,规定它们的名字,要求所有时序图中的实体必须与上下文图中保持一致,不得自己定义新的。如果确实需要增加新的实体,那么首先更新上下文,在上下文图中把实体定义进去才能使用。

例如针对上述车联网的场景,增加一个这样的上下文就可以更加清晰:

在实际项目中,可以利用工具来实现这个一致性。例如CloudModeling绘图工具中,我们会定义完整的系统上下文和系统逻辑架构视图,要求所有的交互时序图必须从这里面链接引用角色和,而不是自己新建一个。

3 关键点2:决定该不该把某个实体放进时序图

在上面的例子中,在车辆相关实体中,有时称为“车辆”这么大的粒度,有时又称细分为“TBox”、“车身控制模块”、“PEPS”。事实上,“TBox”、“车身控制模块”、“PEPS”都是车辆内部模块的一部分,那么究竟什么情况下该把“车辆”这么大的粒度放入时序图,什么情况下该把“TBox”、“车身控制模块”、“PEPS”这样的内部模块展示出来呢?

个人理解是这样的:实体是否展示与业务场景和所设计的对象密切关联,只有在业务场景中与所设计对象有直接交互的实体才有必要放入时序图中,间接交互实体则应当去掉。

在上面的例子中,如果我们设计的对象是TSP及车主手机App,那么车辆内部的实体部分就不需要展开,只需要展示与车云直接交互的TBox模块即可,如下:

远程开车门交互时序图

但是,如果我们设计的对象换成了车身控制模块,那么交互的实体就应当省略TSP及车主手机App相关的实体,把关注点调整到与车身控制模块直接交互的实体上来,例如:

远程开车门交互时序图

4 关键点3:响应消息要与请求消息分开

时序图中交互实体间水平的线条用来表示消息,最常见的有三种:

4.1 同步消息(Synchronous Message)与返回消息(Return Message)

同步消息(也称为调用消息)一定要与返回消息成对使用,特别要强调的是:返回消息样式不得使用同步消息的样式,这是两个完全不同的事情。同步消息表示一个实体对另一个实体的一个接口调用,被调用方要按流程实现提供接口的编码,并按返回消息内容要求进行返回;调用方需要按流程实现调用接口的编码,并对返回消息内容进行处理。为了更清楚的说明问题,往往会在消息中注明关键的参数。

经常看到的错误是不区分同步消息和返回消息,乱画一气,非常让人恼火。有时会看到像这样的时序图,特别注意其中红色的消息线条,看起来似乎“TBox”实体对“TSP”实体的一个接口调用,但实际问一问作者,发现并不是这样,而是上面消息的返回消息。这样的画法就给人造成一种错觉,以为交互实体双方需要实现一个新的接口。

4.2 异步消息(Asynchronous Message)

消息发送者通过消息把信息发给消息接收者,然后继续自己的活动,不等待接收者返回消息。

4.3 自关联消息(Self-Message)

表示实体自身需要实现一个处理过程,也可以调用一个外部实体的消息。

同样以上面车联网场景为例,假定设计的对象是TSP及车主手机App,那么我们只能对这两个实体分解开发任务,如图,我们要求“车主手机App”实现“提供开车门功能”,具体包含向TSP的请求开车门消息调用及返回结果的处理;“TSP”要实现“提供开车门接口”,具体包含向TBox的下发开车门指令及返回结果的处理,还包含一个发送短信通知的异步消息,TSP提供的开车门接口请求参数中应包含关键的用户token、车辆ID信息,返回结果中应包含关键的成功/失败、错误信息。

注意:这里引入了一个新的实体“短信中心”,也应当在上下文图中先加进去才能使用。

远程开车门交互时序图

5 总结

三个关键点:所有交互实体放进上下文,不直接交互的实体去掉,响应消息要与请求消息分开。如果你画的时序图确保以上三个关键点都做到了,我想至少拿出去给大家看的时候会少挨一点抱怨。

点击关注,第一时间了解华为云新鲜技术~

画一个清晰明了的时序图,要掌握这三点相关推荐

  1. 如何画一个精致的思维导图

    画思维导图和画一个精致的思维导图还是有很大的区别的,不仅对软件要求比较高,还要将内容更加的丰富,所以就需要下功夫啦,下面交给大家画精致思维导图的操作方法,想要使用的朋友可以参考使用. 工具/原料: 迅 ...

  2. 如何写一个清晰明了的Bug

    文章转载自公众号  ImportSource , 作者 贺卓凡 bug是不可避免.但如何让自己的bug写得清新脱俗,结构清楚则是需要我们不断努力的. 在开始今天的话题之前,先抛出一个问题,代码结构好是 ...

  3. 在线作图丨如何画一个优美的相关性热图

    相关性热图 相关性分析是通过计算两种因子之间的相关性(Spearman.Pearson.Kendall's Tau系数等),将获得的数值矩阵通过热图直观展示.通过颜色变化反映二维矩阵或表格中的数据信息 ...

  4. 用ANSYS画矩形_用SolidWorks画一个换挡杆防尘罩,此图建了10个基准面,颇为麻烦...

    此图是用SolidWorks2015建模,用KeyShot 8渲染.SW文件在2019年11月8日文件夹.这个图新建了10个基准面,画了9个矩形和一个圆,这种画法有点麻烦还有待改进. 建模步骤: 1. ...

  5. wpf 圆里面画斜线_用SolidWorks画一个腔体管,图很好画,图纸有点乱

    建模过程 1.在[上视基准面]画中心矩形. 2.[拉伸凸台]反向等距:0.2 :给定深度:0.8 . 3.[圆角]半径:0.5 . 4.[异型孔向导]柱形沉头孔,输入截面尺寸. 4-1.位置--3D草 ...

  6. 怎么让热图显示基因名_教你画一个掰弯的热图(Heatmap),展示更多的基因表达量...

    难道,这不像孔雀开屏吗? 写在前面 组学数据已经泛滥,但是信息的挖掘仍任重道远.顺手的工具,可以节省使用者尽可能多的时间,或者将看起来很复杂,很难以完成的事情,变得非常简单. 图形的掰弯,这个是我很久 ...

  7. Mindmanager2020教程篇画一个树状思维导图及试用密钥过期

    MindManager思维导图是一个创造.管理和交流思想的通用标准,其可视化的绘图软件有着直观.友好的用户界面和丰富的功能,这将帮助您有序地组织您的思维.资源和项目进程. 在分析问题时,有许多可行的分 ...

  8. 画时序图的四个好用的工具~

    已剪辑自: https://mp.weixin.qq.com/s/xvCOLaGARp15vCRq6w8h2Q 分享几个画时序图的软件,一些通信协议,如I2C.SPI.UART.MIPI等,都会涉及到 ...

  9. [转]PlantUML画类图、流程图、时序图使用详解

    程序员难免要经常画流程图,状态图,时序图等.以前经常用 visio 画,经常为矩形画多大,摆放在哪等问题费脑筋.有时候修改文字后,为了较好的显示效果不得不再去修改图形.今天介绍的工具是如何使用 Pla ...

最新文章

  1. 中科院在2017年高被引科学家遴选中表现优异
  2. ont维修使能工具_上海OTC机器人维修保养以及调试服务了解
  3. 线上 4 台机器同一时间全部 OOM,到底发生了什么?
  4. Some Experience about userControls
  5. MySQL 服务器调优
  6. 用c语言编程求分数和,用C语言编程平均分数
  7. 第二:HttpClient+testNG实现对接口的测试及校验(接口自动化落地)
  8. 如何高效使用和管理Bitmap--图片缓存管理模块的设计与实现
  9. erf函数处以一个常数_Google对Linux专利处以500万美元的罚款
  10. 《东周列国志》第八回 立新君华督行赂 败戎兵郑忽辞婚
  11. Word文档的使用技巧
  12. Springboot加载静态图片
  13. android刷新时的圆形动画_Android 实现倒计时动画效果
  14. 循环 计算机英语,计算机英语词汇解释
  15. linux内核源码分析之slab(四)
  16. C# Excel命名区域(一)-创建命名区域
  17. Android传感器、语音识别、定位系统、Google Map API、快捷方式、widget编程总结及示例
  18. 02 面向对象设计的七大原则
  19. python 3 日历模块
  20. pAdTy_2 构建连接网络和云的应用程序

热门文章

  1. Nvidia显卡驱动 标准版(Standard)下载地址
  2. PyG基于DeepWalk实现节点分类及其可视化
  3. 批量压缩图片软件-免费图片压缩后高清无损
  4. 项目管理之加班那点事
  5. tgp饥荒服务器文件夹,《饥荒》TGP版服务器搭建及设置图文教程 TGP版怎么建服务器...
  6. android 浏览器 打开本地html文件的方法
  7. 和猿辅导国奖选手的妈妈聊聊:数学新生代的成长之路
  8. photoshop的滤色和正片叠底的混合模式分析
  9. 别低估自己的直觉,也别高估自己的智商
  10. 红旗linux系统字符无法闪烁,红旗 Linux 6.0无法开机