plantuml-绘制状态图和活动图和部署图
背景
状态图:对象的所有状态,以及基于事件发生的状态改变的过程;
活动图:用例的工作流程;
部署图:系统的软硬件物理体系结构;
状态图
基本语法
| 元素 | 语法 | 说明 |
|---|---|---|
| 开始和结束状态 | [*] | 标识开始和结束状态 |
| 箭头 | --> | 添加箭头 |
| 隐藏描述区域 | hide empty description | 隐藏描述区域 |
| 合成状态 | state 合成状态名字{ 增城的状态定义语法} | 可以嵌套状态图 |
| 状态声明 | state 状态名字 : 备注 | 声明状态 |
| fork,join | state state名字 | 分开,合并状态 |
| 并发状态 | -- 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

积分状态图
@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

活动图
基本语法
| 元素 | 语法 | 说明 |
|---|---|---|
| 开始 结束 | 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

增加积分活动图
@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

查询积分活动图
@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

部署图
部署图显示了系统的硬件和安装在硬件上的软件,以及用于连接异构计算机之间的中间件。部署图通常被认为是一个网络图或者物理架构图。
语法
| 元素 | 语法 | 说明 |
|---|---|---|
| 角色 | 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

小结
- 活动图(泳道图)实际上是代码流程的一个梳理,建议编码前,先画活动图;
- 状态图 可以列举出所有状态发生改变的事件,防止遗漏掉某些发生改变的情况;
- 部署图实际上是物理架构图,画的不太好看,但是却可以在上线的时候有效的指导运维;
原创不易,转载请注明出处。
plantuml-绘制状态图和活动图和部署图的更多相关文章
- ****** 五十 ******、软设笔记【UML分析和意义】-类图、对象图、状态图、活动图、顺序图、协作图、构件图、部署图,动静态模式
一.类图(Class Diagram) 描述一组类.接口.协作已经它们之间的图,用来显示系统中各个类的静态结构图. 类之间的关系(relationship) *依赖(dependency) *泛化(g ...
- UML状态图和活动图
UML状态图和活动图 统一建模语言UML(Unified Modeling Language)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对 ...
- UML用法及状态图,活动图介绍
统一建模语言UML(Unified Modeling Language)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制 ...
- UML精粹5 - 状态图,活动图,通信图,组合结构,组件图,协作,交互概述图,时间图
状态机图state machine diagram 下面是状态图的一个例子(一个城堡中的秘密保险箱的控制面板). 转换transition包括3个部分:trigger-signature [guard ...
- (转)UML实践----用例图、类图、对象图、顺序图、协作图、状态图、活动图、组件图、配置图
面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling Language™),这篇课程的目的是展示出UML ...
- 重构之字段改名 UML行为图 用例图 时序图&协作图 状态图&活动图 依恋情结
简单的使用一下字段改名 为什么使用字段改名: 你在一个软件上做的工作越多,对这个软件的数据的理解就越深刻,你需要把这些理解融入到代码中.利用名字的解释作用,让代码更容易被理解. 如何找到该变量的所 ...
- uml活动图
uml是程序员需要掌握一个重要工具,特别在研究hadoop(http://www.iigrowing.cn/hadoop)系统中,有很多相关的uml图形需要绘制,为了方便大家了解uml,在网络上找了些 ...
- <十五>UML核心视图动态视图之活动图
一:动态视图 --->动态视图是描述事物动态行为的. --->需要注意的是:动态视图不能够独立存在,它必需特指一个静态视图活uml元素,说明在静态视图规定的事物结构下它们的动态行为. -- ...
- umlの活动图
在介绍了曾经的类图和用例图等之后,因为对象图是描写叙述类图的某一个时刻的快照,所以类图没有详细的赋值可是对象图能够有详细的值.而包图是蕴含在画uml图之中的,对类图和对象图等进行分类的图,就像wind ...
随机推荐
- 两个div,都设置未inline-block,可是在IE出现错位问题
[实现要求] 红色的和黄色的内容撑开,蓝色包住红黄,不定框居中显示 [遇到问题] chrome显示正常,但是在IE上红黄框会出现错位的问题 [如何解决] 给红色框添加一个overflow:hidde ...
- 《Java知识应用》Java通过Get和Post实现HTTP请求。
Http请求,是非常常见并且的数据交互方式. 下面讲解:Get和Post的两个实战案例. 用于测试的Action(controller). @RequestMapping(value = " ...
- JS中原始值和引用值分析
JS中变量中两种类型的值:原始值,引用值 原始值是存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置. var x = 1; //1就是一个原始值,变量x中存放的就是原始 ...
- c语言入门到精通怎么能少了这7本书籍?
C语言作为学编程最好的入门语言,对一个初进程序大门的小白来说是很有帮助的,学习编程能培养一个人的逻辑思维,而C语言则是公认的最符合人们对程序的认知的一款计算机语言,很多大学都选择了使用C语言作为大学生 ...
- 开源框架 openFrameworks
转自:https://www.cnblogs.com/lidabo/p/9134174.html 此处仅供学习,版权属原作者: 作为一个图形图像方向的研究生,我经常都在和 OpenGL .OpenCV ...
- angular8 导出excel文件
angular package 1.xlsx npm install xlsx --save 2.file-saver npm install file-saver --save npm instal ...
- 知识图谱基础之RDF,RDFS与OWL
https://blog.csdn.net/u011801161/article/details/78833958 https://blog.csdn.net/baidu_15113429/artic ...
- centos_mysql 安装脚本
#!/bin/bash env echo "Download msyql5.7 rpm..." sudo yum install wget wget -i -c http://de ...
- Nginx核心流程及模块介绍
Nginx核心流程及模块介绍 1. Nginx简介以及特点 Nginx简介: Nginx (engine x) 是一个高性能的web服务器和反向代理服务器,也是一个IMAP/POP3/SMTP服务器 ...
- Pikachu-XSS
XSS(跨站脚本)概述 Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS.一般XSS可以分为如下几种常见类型: ...