plantuml-绘制状态图和活动图和部署图​

背景

状态图:对象的所有状态,以及基于事件发生的状态改变的过程;
活动图:用例的工作流程;
部署图:系统的软硬件物理体系结构;

状态图

基本语法

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

登录状态图

@startuml
hide empty description
left to right direction

[*]-->NotLogin:首次打开app

state  NotLogin: 没有登录
state  LoginSuccess: 登录成功
state  LoginFail: 登录失败

NotLogin -->LoginSuccess: 登录
NotLogin -->LoginFail:登录

state LoginFail {
    state 用户不存在: ta校验
    state saas注册失败:注册saas
    state 登记用户信息失败: 登记到tiananUser
    state 参数校验失败 :校验参数
}

state join_state  <<join>>
LoginSuccess-->join_state:组装响应参数
LoginFail-->join_state:组装响应参数

join_state -->[*]:返回JSON数据到客户端

@enduml
file

积分状态图

@startuml
scale 350 width
left to right direction
hide empty description

state noPointRecord : 没有积分记录
state pointZero : 积分为0
state 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 移除箭头

登录活动图

@startuml
header 登录接口活动图
footer 登录接口活动图
|tomcat|
start
:参数校验]

if (参数校验通过 ?) then (yes)
elseif (字符串为空) then (no)
stop
else (其它校验错误)
    stop
endif

|TA服务端|
:用户code远程校验;
|LX Saas|
:saas注册登录;
|mysql|
:登记到saasUser;
|redis|
:保存令牌到Redis;
|tomcat|
:组装响应参数;
stop

@enduml
file

增加积分活动图

@startuml

header 改变用户积分接口活动图
footer 改变用户积分接口活动图

|tomcat|
start 


:登录态检查;

if(令牌非法 ?) then (yes)
:返回未登录;
stop
else (合法)
endif

:接受参数,point , event ;

if(参数检查 ?) then(合法)
else(非法)
:返回参数错误;
stop
endif

|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 参数校验不通过;
stop
endif

|redis|
:从Redis缓存中查询得到记录的总数]
|tomcat|
if(总数不存在)then (不存在)
|mysql|
    :从数据库中查询得到积分详细纪录的总数;
    |redis|
    :设置到redis缓存中;
else

endif

|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 fork
else
    |tomcat|
    -[#green]->总数等于0;
    #green:分页列表为空;
    #green:总积分为0;
endif

|tomcat|
:组装响应参数\n分页列表数据\n用户总积分;
stop;



@enduml
file

部署图

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

语法

元素 语法 说明
角色 actor TaUser as taUser 申明一个角色
代理 agent agent 申明一个代理
程序包 artifact artifact 声明一个程序包
boundary myBoundary
card card
cloud cloud 表示一块私有或者共有云
component myComponent
control myControl
数据库 database mydatabase 表示数据库
entity entity
文件 file file 表示文件服务器
folder folder
frame frame
interface interface
节点 node node 表示一个物理结构
package package
队列 queue queue 消息队列
stack stack
rectangle rectangle
存储 storage storage
usecase usercase
备注文字 [备注文字] 对组件进行文字备注
连线和箭头 -- .. == --> 连接两个元素
包装 元素 名称 {申明元素语法 } 包含关系

系统部署图

@startuml

header TA项目物理架构图
footer TA项目物理架构图

left to right direction




actor TaUser as taUser
node TaApp as taApp {
    agent LxSDK as lxsdk
    agent TaClient as taClient
}

folder tiananuser_folder{
cloud tiananuserCluster
node tomcat1_tiananuser
node tomcat2_tiananuser
node tomcat3_tiananuser

tiananuserCluster -down-> tomcat1_tiananuser
tiananuserCluster -down-> tomcat2_tiananuser
tiananuserCluster -down-> tomcat3_tiananuser



}

folder tianansp_folder{
cloud tiananspCluster
node tomcat1_tianansp
node tomcat2_tianansp
node tomcat3_tianansp

tiananspCluster -down-> tomcat1_tianansp
tiananspCluster -down-> tomcat2_tianansp
tiananspCluster -down-> tomcat3_tianansp

}


node Nginx as nginx

nginx --> tiananuserCluster:负载均衡/路由
nginx --> tiananspCluster:负载均衡/路由


taUser -->  taApp : 访问
taApp --> nginx:http/https


database tiananuser_database[
    用户登录数据库

]
database tianansp_database[
    运营活动数据库
]

database redis[
    redis缓存
]


tiananuser_folder -down-> tiananuser_database
tianansp_folder -right-> tianansp_database

tiananuser_folder -down-> redis
tianansp_folder -up-> redis


node zk [
    zookeeper注册中心
    dubbo的消费者跟生产者通信中间件
    定时任务elasticjob的配置中间件
]


tiananuser_folder -down-> zk
tianansp_folder -up-> zk


node apollo [
    apollo配置中心
]

queue kafka[
    kafka集群
]


tiananuser_folder -down-> apollo
tianansp_folder -up-> apollo


tiananuser_folder -down-> kafka
tianansp_folder -up-> kafka


file fileCDN [
    七牛云或者阿里云存储
]


tiananuser_folder -down-> fileCDN
tianansp_folder -up-> fileCDN


cloud 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. 部署图实际上是物理架构图,画的不太好看,但是却可以在上线的时候有效的指导运维;

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

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

推荐阅读更多精彩内容

  • 背景 当下的软件开发人员,不可避免的需要输出一些软件设计文档,作为一个软件工程专业毕业的工程师,最常用的设计工具就...
    李福春carter阅读 813评论 0 1
  • 原文地址: https://blog.csdn.net/dwarcheng/article/details/524...
    Caiaolun阅读 49,781评论 0 10
  • 1. 基本概念 ​ UML(Unified Modeling Language)即统一建模语言,为面向...
    Benjamin_Lee阅读 637评论 0 0
  • UML(Unified Modeling Language)是一种统一建模语言,为面向对象开发系统的产品进行说明、...
    KBAC阅读 1,636评论 0 3
  • 以下内容部分出至博客园coolstream,主要是自己懒得写了,部分做了修改。官方连接 活动图(Activity ...
    ArcherZang阅读 2,473评论 0 0