软件文档写作-plantuml画用例图和时序图

背景

当下的软件开发人员,不可避免的需要输出一些软件设计文档,作为一个软件工程专业毕业的工程师,最常用的设计工具就是UML,使用UML工具绘制一些软件相关的图,是必备技能,也是输出的技术文档中的重要组成部分。不关注逆向工程,这里只关注快速的绘制对应的图,plantuml是一款比较不错的工具。本节先初步熟悉用例图和时序图。

plantuml介绍

官网主页

功能介绍:

支持快速绘制

  • 时序图
  • 用例图
  • 活动图
  • 类图
  • 组件图
  • 状态图
  • 对象图
  • 部署图
  • 定时图

还支持非UML图:

  • 架构图
  • 甘特图
  • 思维导图
  • ER图

以及不常用的的图:

  • SDL(规范描述语言)
  • 线框图形界面
  • Ditaa
  • 数学公式

画完图之后,可以生成PNG,SVG,Latex格式的图片;

业务场景

x项目的用户后端服务,包括用户登录,用户积分模块;

用例图

用户角度描述系统功能

语法

基本对象 语法 说明
用例 usecase 详细名称 as 简称 定义一个用例
用例带自描述 usecase 详细名称 as “详细描述可分行” 定义一个用例并详细描述
角色 actor :角色全称: as 角色简称 定义一个角色
角色和用例建立联系并设置关系 角色简称-->usercase简称:关系名称 建立角色和用例的关系
继承 角色<竖线--角色 或者 用例<竖线用例 描述角色跟角色之间的继承关系或者用例跟用例之间的继承关系
单行注释 note 位置 of 用例或者角色简称 : 注释内容 增加单行注释
多行注释 note 位置 of 用例或者角色简称 换行 注释内容 换行 end note 添加多行注释
构造类型 《父类》 定义角色或者用例的构造类型,即父类
简单箭头 ->水平, -->垂直线,箭头也可以改变方向或者是双向的 不用指明方向的箭头
方位箭头 -位置-> 带位置的箭头, 位置是 right left down up 上下左右
分割图 newpage 把一页分成两页
定义默认方向 left to right direction 设置默认方向

系统用例图

内部系统用例

@startuml

left to right direction

actor : 其它LX提供给TA的后端系统: as otherLxTaBackendService

note top of otherLxTaBackendService
比如tianansp
负责活动和文章的服务
比如tiananseason
负责西游活动的服务
通过dubbo的rpc方法调用
end note

usecase 修改用户积分 as changeUserPoint
usecase 查询用户总积分 as getUserTotalPoint
usecase 登录校验 as getRestContextByAccessToken


otherLxTaBackendService --> getRestContextByAccessToken:获取用户的登录态[RPC]
otherLxTaBackendService --> changeUserPoint:活动增加或者扣减积分[RPC]
otherLxTaBackendService --> getUserTotalPoint: 查询用户当前总积分[RPC]


@enduml

生成的图:

file

外部系统用例

@startuml

'left to right default

actor : ta用户: as taUser

usecase  用户登录  as  userLogin
usecase 查询积分明细 as findUserPointDetail
usecase 改变积分 as changeUserPointDetail


note bottom of userLogin
TA用户登录
LX交互的后端系统
LX的saas系统
构造登录态
end note

taUser -right-> userLogin: 登录进LX交付的功能[REST]
taUser --> changeUserPointDetail : 修改积分\n阅读文章\n分享文章\n参加活动[REST]
taUser --> findUserPointDetail : 查询积分\n消费获取\n明细[REST]

@enduml
file

时序图(顺序图)

展示对象跟对象之间的协作关系

语法

对象 语法 说明
箭头和线 -> <-实线箭头 <-- -->虚线箭头 标识参与者之间的消息传递
参与者 actor 角色 boundary 带边界 control控制 entity 实体 database 数据库 collections 集合 participant 参与者 标识参与者
重命名 participant 参与者详细名称 as 简称 重命名参与者
定义顺序 participant 参与者详细名称 order 排序号 序号越小越靠前
参与者含有特殊字符 “参与者” 双引号包围
箭头样式 丢失的消息 ->x 实心箭头 -> 虚箭头 ->> 半实心箭头 -\ 半虚箭头 -\ 箭头末尾加0 ->o 各种箭头
箭头颜色 参与者1-[颜色定义]->参与者 改变箭头颜色
消息自动编号 autonumber 放在开始的位置
设置 title,header,footer header footer title在开始的地方定义
组合消息条件分支 alt/else end 条件分支
组合消息循环分支分支 loop end 循环
组合消息 group group end 分组
单行注释 note 位置 :注释内容 给消息增加备注
多行注释 note 位置(right,left,over) 换行 注释内容 换行 end note 给消息增加备注
改变注释的形状 hnote 六边形 rnote 四边形 注释的形状
分隔符 ==分割备注内容== 横向划分模块
引用 ref over 参与者1 参与者2 : 引用内容 引用
延迟 ···标识延迟 ··· 消息固定延迟
空间 3根竖线 间隔
激活生命线 activate 参与者 激活生命线
取消激活生命线 deactivate 参与者 激活生命线
返回 return 参与者 返回
创建参与者 create 参与者 标识创建对象
快捷键 ++ 激活参与者 --取消激活参与者 ** 创建参与者 !!销毁参与者 见语法说明
创建盒子 box "box的命名" #背景色 换行 参与者1 参与者2 end box 纵向划分模块

登录接口时序图

@startuml

autonumber "<b>[00]"

title 登录接口时序图

actor "TA用户" as User #white
participant "TAAPP" as TAAPP #gold
box "LX交付" #gray
participant "LX交付SDK" as LXSDK #orange
participant "LX交付后端\ntiananuser" as LXServer #red
participant "LXsaas后端" as LXSaasServer #gray
end box
participant "TA后端" as TAServer #green

activate User

User -> TAAPP ++:  登录TAAPP\n打开健康TAP页面
==sdk对接==
TAAPP -> LXSDK ++:  userId\n或者加密信息

==后端对接==

LXSDK -> LXServer ++: 登录转换为LX登录态接口
==TA后端对接==
LXServer <-> TAServer ++: 用户信息校验\n
==对接saas==
LXServer <-> LXSaasServer ++: 注册并登录\n到LXSaas
==构造LX专属登录态==
LXServer -> LXServer ++: 登记用户信息\n保存登录令牌到redis

LXServer -> LXSDK ++: 构造LX专属登录态(token)
==后端对接完成==

LXSDK --> TAAPP ++: 正常使用LX交互功能

TAAPP --> User ++: 看到LX交互功能


@enduml
file

改变用户积分

@startuml

autonumber "<b>[#]"

actor TAapp用户 as taUser

control 网关 as nginx
box 接口程序 #green
boundary Web服务器 as tomcat
end box
collections Redis as redis
database Mysql as mysql

taUser -> nginx  ++ : 看文章,增加积分

nginx ->> tomcat ++ : 负载均衡策略遭到一台tomcat

==接口处理流程开始==
tomcat --> tomcat ++ : 参数判断
alt 参数判断不合法
    tomcat -[#red]> taUser ++ : 参数传错误
else 参数合法

tomcat -> mysql ++ : 插入积分改变的明细记录
return 表记录id

tomcat ->redis ++ : 获取缓存中用户对应的记录id

alt 缓存中userId对应的积分id存在
    tomcat -> mysql ++ : 更新用户的总积分
else 缓存中userId对应的积分id不存在
    tomcat -> mysql ++ : 查询得到用户对应的id
    alt 用户的总积分记录在数据库中存在
        tomcat -> mysql ++ :更新用户的总积分
    else userId对应的积分记录id不存在
        tomcat -> mysql ++ :插入用户的总积分记录
    end
    return 用户积分记录对应的记录id
    tomcat -> redis ++: 用户积分记录对应的记录id保存到redis
    return 无返回值
end
tomcat ->redis: 清除掉总积分缓存,分页缓存,总条数缓存

return  用户增加积分明细记录id

end

tomcat -[#green]> taUser ++ : 改变积分成功
@enduml

查询用户积分

小结

原创不易,转载请注明出处。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容