这篇文章将为你们介绍如何以写代码的方式画时序图(也叫顺序图),同时也会介绍一些时序图基础知识。编程
相比于使用画图工具拖拽画图,用代码画图有什么好处?小程序
话很少说,先来看看用代码画的时序图的效果。以下图是小程序登录过程当中,小程序、服务器、微信服务器三者交互的时序图:bash
而画这幅图只用了不多而且很简单的代码:服务器
sequenceDiagram
小程序 ->> 小程序 : wx.login()获取code
小程序 ->> + 服务器 : wx.request()发送code
服务器 ->> + 微信服务器 : code+appid+secret
微信服务器 -->> - 服务器 : openid
服务器 ->> 服务器 : 根据openid肯定用户并生成token
服务器 -->> - 小程序 : token
复制代码
看了这个心动了没有?学起来吧!微信
君欲善其事,必先利其器。想要用代码画图,就得有支持这种方式的画图工具。这里介绍两款工具:markdown
免费 Markdown 编辑器 Typora,很是好用且美观。其自带 mermaid 画图扩展。app
在用 Typora 编写 Markdown 文本时,插入这样一个代码块:异步
```mermaid ……时序图代码…… ```编程语言
其中时序图的代码便会自动被 mermaid 解析和渲染。演示视频编辑器
这样的使用方式很简单,其它的能支持 mermaid 的编辑器也能够这样使用,好比印X笔记。
若是你不想用 Markdown,能够选择网页版 mermaid 编辑器,免费且无需注册。连接:dwz.cn/hOMIoH4w
工具准备稳当后,咱们开始学习画图代码的语法。同时也会顺带对时序图做一些简单介绍,一方面帮助读者温习时序图的内容,另外一方面统一一下术语和概念。
时序图是一种表现交互过程的图示,主要展现各个参与者之间是如何交互的,以及交互的顺序是怎样的。它的主要构成元素有:
传统时序图概念中参与者有角色和类对象之分,但这里咱们不作此区分,用参与者表示一切参与交互的事物,能够是人、类对象、系统等形式。中间竖直的线段从上至下表示时间的流逝。
画法:
sequenceDiagram
participant 客户端
participant 服务器
复制代码
sequenceDiagram
为每幅时序图的固定开头participant <参与者名称>
声明(添加)参与者。语句次序即为参与者横向排列的次序,如后续示例所示。
交互时一方对另外一方的操做(好比接口调用)或传递出的信息。用单向箭头来表示——实线表明主动发出消息;虚线表明响应;末尾带「X」表明异步消息,无需等待回应。
画法:
sequenceDiagram
participant 老板L
participant 员工A
老板L ->> 员工A : “在这里咱们是兄弟!”
老板L -x 员工A : 画个饼
员工A -->> 老板L : 怯怯地鼓掌
复制代码
消息语句格式为:
<参与者> <箭头> <参与者> : <描述文本>
。其中
<箭头>
的写法有:
->>
:显示为实线箭头(主动发出消息)-->>
:显示为虚线箭头(响应)-x
:显示为末尾带「X」的实线箭头(异步消息)
注:
participant <参与者名称>
这句其实能够省略,省略后参与者横向排列的次序,由消息语句中参与者出现的次序决定。如后续示例所示。
从消息接收方的时间线上标记一小段时间,表示对消息进行处理的时间间隔。
画法以下,注意体会箭头符号后的 +
和 -
的使用方法和效果,它们至关于激活框的开关:
sequenceDiagram
老板M ->> + 员工B : “不只996,还要669!”
员工B -->> - 老板M : 怯怯地鼓掌
老板M ->> + 员工B : “悔创本司!”
员工B -->> - 老板M : 怯怯地鼓掌
复制代码
画法:
sequenceDiagram
Note left of 老板L : 对脸不感兴趣
Note right of 老板M : 对钱不感兴趣
Note over 老板L,老板M : 对996感兴趣
复制代码
在条件知足时,重复发出消息序列。(至关于编程语言中的 while 语句。)
画法:
sequenceDiagram
网友 ->> + X宝 : 网购钟意的商品
X宝 -->> - 网友 : 下单成功
loop 一天七次
网友 ->> + X宝 : 查看配送进度
X宝 -->> - 网友 : 配送中
end
复制代码
在多个条件中做出判断,每一个条件将对应不一样的消息序列。(至关于 if 及 else if 语句。)
画法:
sequenceDiagram
土豪 ->> 取款机 : 查询余额
取款机 -->> 土豪 : 余额
alt 余额 > 5000
土豪 ->> 取款机 : 取上限值 5000 块
else 100 < 余额 < 5000
土豪 ->> 取款机 : 有多少取多少
else 余额 < 100
土豪 ->> 取款机 : 退卡
end
取款机 -->> 土豪 : 退卡
复制代码
在某条件知足时执行消息序列,不然不执行。至关于单个分支的 if 语句。
画法:
sequenceDiagram
老板们 ->> 员工们 : 开始实行996
opt 永不可能
员工们 -->> 老板们 : 拒绝
end
复制代码
将消息序列分红多个片断,这些片断并行执行。
画法:
sequenceDiagram
老板C ->> 员工C : 开始实行996
par 并行
员工C ->> 员工C : 刷微博
and
员工C ->> 员工C : 工做
and
员工C ->> 员工C : 刷朋友圈
end
员工C -->> 老板C : 9点下班
复制代码
用代码画时序图的方法就是这些,内容很简单,却能知足大多数时候的需求。不妨找几个实际例子练练手,加深下印象。
做者相关阅读: