首页 > 编程语言 >【专业技能】程序员的软件工程素养之画好 UML 时序图

【专业技能】程序员的软件工程素养之画好 UML 时序图

时间:2024-03-05 10:56:40浏览次数:29  
标签:异步 专业技能 对象 中间件 时序 消息 之画 UML 交互

目录

前言

笔者在本科的时候上过软件工程的专业课,也完成过类似的课堂作业,但是工作以后一直没怎么用上。碰巧前段时间有碰到一个复杂系统的部分功能设计,作为设计文档的一部分,时序图也被我拿起来派上用场了。

时序图通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作,同时它解释了一个系统中的不同部件之间,彼此是通过怎样的交互来实现某个功能,、以及特定场景下交互发生的顺序。


一、认识时序图

时序图(Sequence Diagram),又名序列图、循序图,是一种UML交互图。一般的软件开发都是为了支撑某个具体的业务,有时候业务的流程会比较复杂,涉及到多种角色,这时就可以使用时序图来梳理这个业务逻辑。这样会使业务看起来非常清晰,代码写起来也是水到渠成的事情。

1.1时序图元素

一般来说,我们在画时序图时会涉及到以下7种元素:

  • 角色(Actor)

    系统角色,可以是人或者其它系统、子系统,以一个小人图标表示。

  • 对象(Object)

    位于时序图的顶部,用一个矩形表示,对象的选择一般有以下三种:

    • 某个系统或者子系统的名称;
    • 涉及到的中间件的名称;
    • 涉及到具体的类和对象的名称。
  • 生命线(LifeLine)

    时序图中每个对象和底部中心都有一条垂直的虚线,这就是对象的生命线,以一条垂直的虚线表示。

  • 控制焦点(Activation)

    控制焦点代表时序图中在对象生命线上某段时期执行的操作,用一个很窄的矩形表示。

  • 消息(Message)

    表示对象之间发送的信息,可以分为以下三种类型:

    • 同步消息(Synchronous Message)

      消息的发送者把控制传递给消息的接收者,然后停止活动,等待接收者放弃或者返回控制,用来表示同步的意义。用一条实线和实心箭头来表示。

    • 异步消息(Asynchronous Message)

      消息发送者把信号传递给接收者,然后继续自己的活动,不等待接收者返回消息或控制,即异步消息的发送者和接收者是互不影响的。用一条实线和大于号表示。

    • 返回消息(Return Message)

      返回消息表示调用过程的返回,用虚线和小于号表示。

  • 自关联消息

    表示对象内方法的自调用或者调用对象内的另一个方法,用一个半闭合的矩形和下方实心箭头表示。

  • 组合片段

    组合片段用来解决交互执行的条件和方式,它允许在时序图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。下面说明几个相对来说比较常见的组合片段:

    组合名称 含义说明
    ref 引用其它地方定义的组合片段
    alt 在一组特定行为中根据条件选择某个交互
    opt 表示一个可选的行为
    break 提供了和编程语言中与 break 类似的机制
    loop 说明交互片段会被重复执行

其中前 6 种是比较常用和重要的元素,最后的组合片段元素相对比较复杂。

1.2怎么使用

下面举一个用户调起支付宝的例子来说明上面提到的元素具体是怎么使用的。

调起支付宝支付时序图

注:调起支付的时序图可能没有全覆盖上面说的元素,下面一节的示例可能更加全面。


二、画好时序图

我本人一般是使用时序图来梳理业务逻辑的,碰上比较复杂的业务,需要几个中间件或者系统参与的时候,时序图能很好地展示各个系统和中间件的调用关系。

2.1一般步骤

为了画好时序图,我自己总结出了以下几个值得注意的步骤:

  1. 明确业务涉及的对象,一般是某个系统或者中间件,这很重要;
  2. 每个对象的生命线需要明确各自的控制焦点,即该系统或者中间件按照流程需要做的事情,比如后台一般增删改查、数据库读/写、MQ异步生产/消费等;
  3. 对象进行自调用时注意与页面的交互,是否涉及状态变更,是否涉及数据的入库和返回展示;
  4. 注意中间件的使用是异步or同步,异步的话注意与其它系统的关联,同时由于是异步,还可以着重判断一下异步的结果情况后再进行下一步;
  5. 组合片段的选择性使用,比较多的是 alt 和 opt,看页面是否可以选择性交互,或者看结果是否可以选择性操作。

2.2举个例子

下面我举一个实际项目的业务例子,主要是为系统用户发放获奖证书的流程,涉及到管理后台、消息队列、数据库和APP(即H5页面)这几个对象。流程如下:

  • 用户登录后台后新增/编辑获奖证书,选择用户进行发放,并将产生的数据持久化;
  • 发放时 MQ 生产者发送异步消息,无论消费是否成功都返回发送成功给前端;
  • MQ 消费发送过来的携带用户信息的消息,消费成功后将数据持久化在数据库;
  • H5 端经过页面交互后,获取上一步的数据库的数据进行前端展示。
发放获奖证书时序图

2.3推荐工具

  • Diagrams (原名draw.io)

    在线网址:https://app.diagrams.net/

    我个人是比较推荐使用 Diagrams (原名draw.io) 的,它是一款免费且开源的专业画图工具。它具有本地存储和离线使用的功能,同时也支持多人协作和多种文件格式的导入导出。

Diagrams 在线
  • processOn(不推荐)

    在线网址:https://www.processon.com/

    其实我最开始接触专业 UML 画图的工具是 processOn,功能强大且模板多,最主要是那个时候使用是免费的。但是这两年开始收费了:模板收费就算了,自己画也要收费,我就放弃了。当然,有付费意愿的朋友是可以试试的,应该可以满足你的大部分需求。

processOn

三、其它作用

开发人员掌握画图的技能可以将零散的知识碎片结构化,通过图形来结构化我们的思维模式,这样的好处是可以清晰的认识到自身对事物的理解和掌控程度。

  • 首先,在我们编码之前先做设计图,可以让自己对业务需求有一个较深的理解,避免自己一边写编码一边踩业务需求的坑。

  • 其次,可以降低同事之间的沟通理解成本,看图可能会比看代码更容易理解业务逻辑,也能够让非技术同事明白程序实现的真正逻辑。

  • 最后,程序的设计图,可以存档沉淀为公司宝贵的技术资源,优秀的设计图还可以共享给其他同事学习参考,实现真正的 "共同富裕"。


四、文章小结

到这里关于 UML 时序图的分享就告一段落了,如果文章有错误或不足,还请大家指正。或者大家有什么更好的 idea,也都欢迎在评论区讨论交流。

参考文章

标签:异步,专业技能,对象,中间件,时序,消息,之画,UML,交互
From: https://www.cnblogs.com/CodeBlogMan/p/18022810

相关文章

  • ChatGPT用10秒画完一张UML流程图,而我用了。。。
    不用AI的程序员,失业潮真的快来临了。一张订单履约的流程图,我花了10分钟才完成,而ChatGPT绘图过程只用了10秒钟,基本可以达到同样的水平,通过ChatGPT可以显著提高画流程图的效率。订单履约流程是一系列精细协作的流程,从客户在销售平台下单开始,至商品交付用户手中结束。此过程跨越多......
  • 绘图工具 plantuml
    结合chatgpt,自动生成美观的UML图,时序图、类图、用例图、流程图等。网址https://plantuml-editor.kkeisuke.dev/下面是一个例子:门面模式(FacadePattern)主要用于为复杂的系统提供一个简单的接口,通过创建一个门面类,它为子系统中的一组接口提供一个统一的高层接口,使得子系统更加容......
  • 零基础入门Vue之画龙点睛——再探监测数据
    追忆上一节:零基础入门Vue之影分身之术——列表渲染&渲染原理浅析虽然我深知,大佬告诉我”先学应用层在了解底层,以应用层去理解底层“,但Vue的数据如何检测的我不得不去学否则,在写代码的时候,可能会出现我难以解释的bug对此,本篇文章,将记录我对Vue检测数据的理解对于Vue检测数据......
  • UML类图及各种线代表的关系含义总结
    原文:UML类图及各种线代表的关系含义总结_uml各种线条代表什么意义,请用uml图例详细说明-CSDN博客一、认识类图类图可以说是UML里使用频率最高的,类图是描述系统中的类,以及各个类之间的关系的静态视图。能够让我们在正确编写代码以前对系统有一个全面的认识。类图是一种模型类型,确......
  • “类图”之旅UML继承(泛化),实现,关联依赖,组合聚合.
     开启“类图”之旅说到对系统代码中的模型梳理,其实最好的方式还是使用UML类图。上个章节中老猫没有展开和大家分享UML类图,一个是由于篇幅的原因,第二个是老猫觉得类图对于咱们后续阅读框架源码以及底层设计模式有着相当大的帮助,所以很有必要将其作为单独一篇来和大家分享。如......
  • MarkDown基础及表格、KaTeX公式、矩阵、流程图、UML图、甘特图语法
    概述最多可设置6级标题技巧列表有序列表MD语法:1.你好2.我也好呈现效果:你好我也好无序列表MD语法:-a-b*aa*bb+aaa+bbb效果:abaabbaaabbb结论,支持三种方式:-、*、+TODO列表MD语法:-[x]后端接口开发-[]与前端联调呈现效果:后端......
  • 阅读笔记《大象:Thinking in UML》下
    《ThinkinginUML》中的大象思考引发了我对UML在软件开发中的重要性和应用的思考。大象的比喻不仅揭示了软件项目的庞大和复杂性,同时也突显了UML作为一种建模语言的价值。首先,大象象征了软件项目的庞大复杂性。在一个庞大的项目中,各种功能、模块和组件交织在一起,形成了一个庞大......
  • IDEA画图神器 PlantUML
    PlantUML是一款开源的UML图绘制工具,支持通过文本来生成图形,使用起来非常高效。可以支持时序图、类图、对象图、活动图、思维导图等图形的绘制。下面使用PlantUML来绘制一张流程图,可以实时预览,速度也很快!在线安装首先在IDEA的插件市场中搜索PlantUML,安装这个排名第一的插件;......
  • 设计模式--UML类图
    ‘动物’矩形框,它就代表一个类(Class)。类图分三层,第一层显示类的名称,如果是抽象类,则就用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或行为。注意前面的符号,‘+’表示public,‘-’表示private,‘#’表示protected......
  • 【UML图介绍】
    前言UML不仅仅是一种图形表示法,它更是一种沟通和思考软件设计的语言。它的标准化特性使得项目团队成员能够跨专业背景共同理解和讨论软件设计的各个方面。一、UML是什么?UML(UnifiedModelingLanguage,统一建模语言)是一种专为软件系统的分析和设计而创建的标准化建模语言。它为软......