博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
plantuml-绘制状态图和活动图和部署图
阅读量:4210 次
发布时间:2019-05-26

本文共 5051 字,大约阅读时间需要 16 分钟。

背景

状态图:对象的所有状态,以及基于事件发生的状态改变的过程;

活动图:用例的工作流程;

部署图:系统的软硬件物理体系结构;

状态图

基本语法

元素 语法 说明
开始和结束状态 [*] 标识开始和结束状态
箭头 --> 添加箭头
隐藏描述区域 hide empty description 隐藏描述区域
合成状态 state 合成状态名字{ 增城的状态定义语法} 可以嵌套状态图
状态声明 state 状态名字 : 备注 声明状态
fork,join state state名字 分开,合并状态
并发状态 -- or 或者双竖线 状态是并发改变的
箭头方向 top down left right 可以控制箭头的方向
单行注释 note 方位 of 状态名 : 单行注释 单行注释
多行注释 note 方位 of 状态名 换行 单行注释 换行 end note
多行注释

登录状态图

@startumlhide empty descriptionleft to right direction[*]-->NotLogin:首次打开appstate  NotLogin: 没有登录state  LoginSuccess: 登录成功state  LoginFail: 登录失败NotLogin -->LoginSuccess: 登录NotLogin -->LoginFail:登录state LoginFail {    state 用户不存在: ta校验    state saas注册失败:注册saas    state 登记用户信息失败: 登记到tiananUser    state 参数校验失败 :校验参数}state join_state  <
>LoginSuccess-->join_state:组装响应参数LoginFail-->join_state:组装响应参数join_state -->[*]:返回JSON数据到客户端@enduml

file

积分状态图

@startumlscale 350 widthleft to right directionhide empty descriptionstate noPointRecord : 没有积分记录state pointZero : 积分为0state pointOk : 有积分[*] -->  noPointRecord: 增加积分noPointRecord --> pointZero: 初始化pointZero --> pointOk: 增加/消耗积分pointOk --> [*]@enduml

file

活动图

基本语法

元素 语法 说明
开始 结束 start stop 开始结束活动
活动 :活动名称; 定义活动
条件语句 if (条件 ?) then (yes) 换行 下一个活动 else(no) endif 条件分支
循环语句 repeat 换行 活动 换行 repeatwhile(条件 ?) 先执行再判断
循环语句 while ( 成立的条件?) 换行 活动 换行 endwhile(不成立的条件描叙) 先判断条件在循环
改变活动的形状 :活动> < ] } / 竖线 分别得到不同的形状
并行处理 fork fork again end fork 并行处理
组合 partition group名称 { 活动图语法} 对活动进行分组
泳道 两根竖线包围 泳道
分离 detach 移除箭头

登录活动图

@startumlheader 登录接口活动图footer 登录接口活动图|tomcat|start:参数校验]if (参数校验通过 ?) then (yes)elseif (字符串为空) then (no)stopelse (其它校验错误)    stopendif|TA服务端|:用户code远程校验;|LX Saas|:saas注册登录;|mysql|:登记到saasUser;|redis|:保存令牌到Redis;|tomcat|:组装响应参数;stop@enduml

file

增加积分活动图

@startumlheader 改变用户积分接口活动图footer 改变用户积分接口活动图|tomcat|start :登录态检查;if(令牌非法 ?) then (yes):返回未登录;stopelse (合法)endif:接受参数,point , event ;if(参数检查 ?) then(合法)else(非法):返回参数错误;stopendif|mysql|:插入积分增加详细纪录;|tomcat|:得到记录Id;|redis|:按照userId查询得到用户积分的表记录Id;|tomcat|if(记录id不存在 ?)then(yes)|mysql|:插入用户的积分记录得到id;:更新用户的总积分;else(id存在):更新用户的总积分;endif|redis|:删除用户总积分的缓存;:删除用户积分总条数的缓存;:删除用户积分明细分页记录的缓存;|tomcat|:得到明细记录的id,返回;:返回客户端;stop@enduml

file

查询积分活动图

@startuml|tomcat|start#gold:接受参数,pageNum,pageSize|:参数校验;if (参数校验通过 ?) then(通过)else (不通过)#red:报错 401 X 参数校验不通过;stopendif|redis|:从Redis缓存中查询得到记录的总数]|tomcat|if(总数不存在)then (不存在)|mysql|    :从数据库中查询得到积分详细纪录的总数;    |redis|    :设置到redis缓存中;elseendif|tomcat|:得到纪录的总条数;if(总数是否大于0 ?)then    -[#red]->总数大于0;    fork        |redis|        :从Redis缓存分页查询得到列表;        |tomcat|        if (redis中获取不到数据 ?) then( 获取不到)            |mysql|            :从数据库中获取得到列表;            |redis|            :设置到redis缓存中;        else (获取到了)        endif        |tomcat|        :得到分页查询的列表;    fork again        |redis|        :从Redis缓存中查询得到用户总积分;        |tomcat|        if (redis中获取不到数据 ?) then( 获取不到)            |mysql|           :从数据库中获取得到用户总积分;           |redis|           :设置到redis缓存中;        else (获取到了)        endif        |tomcat|        :得到用户总积分;    end forkelse    |tomcat|    -[#green]->总数等于0;    #green:分页列表为空;    #green:总积分为0;endif|tomcat|:组装响应参数\n分页列表数据\n用户总积分;stop;@enduml

file

部署图

部署图显示了系统的硬件和安装在硬件上的软件,以及用于连接异构计算机之间的中间件。部署图通常被认为是一个网络图或者物理架构图。

语法

系统部署图

@startumlheader TA项目物理架构图footer TA项目物理架构图left to right directionactor TaUser as taUsernode TaApp as taApp {    agent LxSDK as lxsdk    agent TaClient as taClient}folder tiananuser_folder{cloud tiananuserClusternode tomcat1_tiananusernode tomcat2_tiananusernode tomcat3_tiananusertiananuserCluster -down-> tomcat1_tiananusertiananuserCluster -down-> tomcat2_tiananusertiananuserCluster -down-> tomcat3_tiananuser}folder tianansp_folder{cloud tiananspClusternode tomcat1_tiananspnode tomcat2_tiananspnode tomcat3_tianansptiananspCluster -down-> tomcat1_tianansptiananspCluster -down-> tomcat2_tianansptiananspCluster -down-> tomcat3_tianansp}node Nginx as nginxnginx --> tiananuserCluster:负载均衡/路由nginx --> tiananspCluster:负载均衡/路由taUser -->  taApp : 访问taApp --> nginx:http/httpsdatabase tiananuser_database[    用户登录数据库]database tianansp_database[    运营活动数据库]database redis[    redis缓存]tiananuser_folder -down-> tiananuser_databasetianansp_folder -right-> tianansp_databasetiananuser_folder -down-> redistianansp_folder -up-> redisnode zk [    zookeeper注册中心    dubbo的消费者跟生产者通信中间件    定时任务elasticjob的配置中间件]tiananuser_folder -down-> zktianansp_folder -up-> zknode apollo [    apollo配置中心]queue kafka[    kafka集群]tiananuser_folder -down-> apollotianansp_folder -up-> apollotiananuser_folder -down-> kafkatianansp_folder -up-> kafkafile fileCDN [    七牛云或者阿里云存储]tiananuser_folder -down-> fileCDNtianansp_folder -up-> fileCDNcloud ELK {    node elsticSearch    node filebeat    node kibana}node kubernetes{    node healmcharts[       交付服务    ]    node harbor[        harbor监控管理kubernetes对象    ]}tiananuser_folder -down-> ELK:日志写入tianansp_folder -up-> ELK:日志写入tiananuser_folder -down-> kubernetes:发布和管控docker节点tianansp_folder -up-> kubernetes:发布和管控docker节点@enduml

file

小结

1. 活动图(泳道图)实际上是代码流程的一个梳理,建议编码前,先画活动图;

2. 状态图 可以列举出所有状态发生改变的事件,防止遗漏掉某些发生改变的情况;

3. 部署图实际上是物理架构图,画的不太好看,但是却可以在上线的时候有效的指导运维;

原创不易,转载请注明出处,欢迎多沟通交流

你可能感兴趣的文章
ConcurrentLinkedDeque源码解析
查看>>
ReentrantLock源码解析
查看>>
StampedLock源码解析
查看>>
ReentrantReadWriteLock源码解析
查看>>
springboot源码解析(四)
查看>>
CompletionService实践
查看>>
YApi在Window上离线安装笔记
查看>>
Talib学习笔记(一)- 成交量指标学习
查看>>
Tkinter学习笔记(一)
查看>>
MySql学习笔记(二)- 索引的设计和使用
查看>>
MySql学习笔记(一)- 表类型有哪些,怎么用?
查看>>
二阶趋势交易法
查看>>
Mysql学习笔记(十三)查看mysql日志
查看>>
JVM垃圾回收相关知识笔记
查看>>
Curator学习笔记(一)- 读写锁
查看>>
第一次炒股小记
查看>>
《redis in action》ZSet相关命令
查看>>
《redis in action》redis发布订阅
查看>>
《redis in action》sort排序命令
查看>>
《redis in action》redis事务
查看>>