简介
时序图(Sequence Diagram)用于描述参与者之间消息交互的顺序,也叫序列图。
包括的建模元素主要有:参与者(Actor)、消息(Message)、生命线(Lifeline)、控制流(Focus of control)等等。
相关资料:
实战
最终效果
Step by Step
初始化
首先,我们初始化,我个人习惯会如下配置:
autonumber
自动对消息
进行编号hide footbox
只在顶部显示参与者
title
图表标题
参与者
主要格式:类型 别名 as 标识符 样式
actor "用户" as User
是用户类型的参与者,如果不需要别名,可以直接actor User
。participant "浏览器" as Browser
就是常用的方框。participant "服务端" as Server #orange
后面的样式用来加底色,好看一点。
| ``` @startuml
autonumber hide footbox title 访问页面
actor “用户” as User participant “浏览器” as Browser participant “服务端” as Server #orange
@enduml
| <br /> |
| --- | --- |
<a name="g5ctpm"></a>
### 消息
主要格式:`参与者 A -> 参与者 B : 消息描述`
- `User -> Browser: 输入 URL` 非常简明达意的表达了: `User 在 Browser 中输入 URL` 这个意图。
- `Server -> Server` 表示给自己发消息。
- `Browser --> User` 用虚线来表示返回。
|
@startuml
autonumber hide footbox title 访问页面
actor “用户” as User participant “浏览器” as Browser participant “服务端” as Server #orange
User -> Browser: 输入 URL Browser -> Server: 请求服务器 Server -> Server: 模板渲染 Server -> Browser: 返回 HTML Browser —> User
@enduml
| <br /> |
| --- | --- |
<a name="c1qeqg"></a>
### 美化
**到这一步时,绝大部分情况下,就已经够了,我们用了最小的成本,来最大化的满足两个开发者者之间的图形化理解沟通。**
接着,如果你们团队成员完全掌握了 PlantUML 并且都追求完美的话,可以来美化下:
- `activate User` 和 `deactivate Server` 用于控制参与者的 `生命线` 上的 `活动条` 。
- `User -[#blue]> Browser` 可以用来为线条着色。
- `note right of Server: 记录访问日志` 用于显示备注。
- `...` 用于截断,表达异步;`|||` 用于增加上下两条线的空间。
|
@startuml
autonumber hide footbox title 访问页面
actor “用户” as User participant “浏览器” as Browser participant “服务端” as Server #orange
activate User User -[#blue]> Browser: 输入 URL activate Browser Browser -> Server: 请求服务器 activate Server #orange Server -> Server: 模板渲染 note right of Server: 记录访问日志 Server -> Browser: 返回 HTML … Browser -> Server: 请求静态资源 JS/CSS deactivate Server ||| Browser -> Browser: 排版 + 渲染 Browser —> User
@enduml
| <br /> |
| --- | --- |
<a name="3xgvzg"></a>
# 更多语法
在 PlantUML 里面,时序图是比较完善的语法,我们上面的介绍只是涵盖了最常用的内容,其他的可以参见[官方文档](http://plantuml.com/sequence-diagram) :
- 箭头的样式
- 表示 `if/else` 或 `loop` 循环
- 区域分割,用于表示不同阶段
<a name="0bqait"></a>
# 写在最后
一定一定要切记性价比,不要过度美化,不要忘了我们的初心是:没有心智负担的绘图体验。
最后秀一张我最近画的时序图:

对应的源码:
@startuml
autonumber hide footbox title Node 应用研发部署流程
actor “开发者” as user participant “代码仓库(GitLab)” as gitlab participant “持续集成系统” as ci participant “运维发布系统” as sys #orange participant “服务器” as server
== 研发流程 == user -> gitlab: 提交代码 activate user deactivate user activate gitlab gitlab -> ci: 单元测试 deactivate gitlab activate ci note right of ci: tar 或 docker ci -> ci: 打包 ci -> sys: 推送 note right of sys: 存储到 oss activate sys #orange deactivate ci deactivate sys
…
== 上线/回滚流程 == user -> sys: 选择要上线的版本 activate sys #orange activate user deactivate user sys -> server: 推送 activate server note right of server: 无需—安装依赖—,快速且确定 server -> server: 解压 server -> server: 启动 server —> sys
@enduml ```