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

打印 上一主题 下一主题

主题 1745|帖子 1745|积分 5235

目录

媒介

笔者在本科的时间上过软件工程的专业课,也完成过类似的课堂作业,但是工作以后不停没怎么用上。碰巧前段时间有遇到一个复杂系统的部分功能计划,作为计划文档的一部分,时序图也被我拿起来派上用场了。
时序图通过形貌对象之间发送消息的时间顺序表现多个对象之间的动态协作,同时它解释了一个系统中的差别部件之间,彼此是通过怎样的交互来实现某个功能,、以及特定场景下交互发生的顺序。
一、熟悉时序图

时序图(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一般步骤

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

  • 明确业务涉及的对象,一般是某个系统或者中间件,这很重要;
  • 每个对象的生命线需要明确各自的控制焦点,即该系统或者中间件按照流程需要做的事情,比如背景一般增删改查、数据库读/写、MQ异步生产/消费等;
  • 对象进行自调用时留意与页面的交互,是否涉及状态变动,是否涉及数据的入库和返回展示;
  • 留意中间件的使用是异步or同步,异步的话留意与其它系统的关联,同时由于是异步,还可以偏重判断一下异步的结果情况后再进行下一步;
  • 组合片断的选择性使用,比较多的是 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,也都欢迎在批评区讨论交流。
参考文章

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小秦哥

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表