背景

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

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

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

状态图

基本语法

元素 语法 说明
开始和结束状态 [*] 标识开始和结束状态
箭头 --> 添加箭头
隐藏描述区域 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

小结

  1. 活动图(泳道图)实际上是代码流程的一个梳理,建议编码前,先画活动图;
  2. 状态图 可以列举出所有状态发生改变的事件,防止遗漏掉某些发生改变的情况;
  3. 部署图实际上是物理架构图,画的不太好看,但是却可以在上线的时候有效的指导运维;

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

plantuml-绘制状态图和活动图和部署图​的更多相关文章

  1. ****** 五十 ******、软设笔记【UML分析和意义】-类图、对象图、状态图、活动图、顺序图、协作图、构件图、部署图,动静态模式

    一.类图(Class Diagram) 描述一组类.接口.协作已经它们之间的图,用来显示系统中各个类的静态结构图. 类之间的关系(relationship) *依赖(dependency) *泛化(g ...

  2. UML状态图和活动图

    UML状态图和活动图 统一建模语言UML(Unified Modeling Language)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对 ...

  3. UML用法及状态图,活动图介绍

    统一建模语言UML(Unified Modeling Language)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制 ...

  4. UML精粹5 - 状态图,活动图,通信图,组合结构,组件图,协作,交互概述图,时间图

    状态机图state machine diagram 下面是状态图的一个例子(一个城堡中的秘密保险箱的控制面板). 转换transition包括3个部分:trigger-signature [guard ...

  5. (转)UML实践----用例图、类图、对象图、顺序图、协作图、状态图、活动图、组件图、配置图

    面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling Language™),这篇课程的目的是展示出UML ...

  6. 重构之字段改名 UML行为图 用例图 时序图&协作图 状态图&活动图 依恋情结

    简单的使用一下字段改名 为什么使用字段改名: ​ 你在一个软件上做的工作越多,对这个软件的数据的理解就越深刻,你需要把这些理解融入到代码中.利用名字的解释作用,让代码更容易被理解. 如何找到该变量的所 ...

  7. uml活动图

    uml是程序员需要掌握一个重要工具,特别在研究hadoop(http://www.iigrowing.cn/hadoop)系统中,有很多相关的uml图形需要绘制,为了方便大家了解uml,在网络上找了些 ...

  8. <十五>UML核心视图动态视图之活动图

    一:动态视图 --->动态视图是描述事物动态行为的. --->需要注意的是:动态视图不能够独立存在,它必需特指一个静态视图活uml元素,说明在静态视图规定的事物结构下它们的动态行为. -- ...

  9. umlの活动图

    在介绍了曾经的类图和用例图等之后,因为对象图是描写叙述类图的某一个时刻的快照,所以类图没有详细的赋值可是对象图能够有详细的值.而包图是蕴含在画uml图之中的,对类图和对象图等进行分类的图,就像wind ...

随机推荐

  1. JS基础-变量类型和类型转换

    JS 变量类型 JS中有 6 种原始值,分别是: boolean number string undefined symbol null 引用类型: 对象 数组 函数 JS中使用typeof能得到哪些 ...

  2. Java垃圾回收机制你还不明白?一线大厂面试必问的!

    什么是自动垃圾回收? 自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制. 所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象:而未使用中的对象(未 ...

  3. centos7制作U盘启动盘

    一.准备相关软件 1.8G以上U盘 2.UltraISO虚拟光驱(试用版即可)最新版 下载地址:https://cn.ultraiso.net/xiazai.html  点击下载试用 3.CentOS ...

  4. elementui入门

    1.前端服务器搭建 (1)创建一个static web project (2) 安装 npm install -g vue-cli (3) vue init webpack 项目名 (4)cd 项目名 ...

  5. 【Springboot】用Springboot Admin监控你的微服务应用

    1 简介 目前,微服务大行其道,各大小公司争相学习模仿,把单体应用拆得七零八落.服务多了,运行的实例多了,给运维人员的压力就更大了.如果有十几个应用,单单做Health Check就已经够费时间的了. ...

  6. 视频剪辑什么鬼?Python 带你高效创作短视频

    ​阅读文本大概需要 10 分钟. 近两年,抖音.快手将短视频推到风口浪尖上,要生产出高质量的视频,离不开视频剪辑这一环节:在全民剪片浪潮中,大众使用最多的剪辑软件如:Pr.FCPX.剪印.Vue 等. ...

  7. C# -- DateTime与TimeSpan

    1. DateTime的使用 DateTime dt = DateTime.Now; StringBuilder sb = new StringBuilder(); sb.AppendLine(str ...

  8. 利用Azure虚拟机安装Dynamics 365 Customer Engagement之十二:新增SQL Server可用性副本

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  9. day04逻辑运算符短路、多分支结构(if和switch)、循环结构、while循环

    复习 1.运算符和表达式 1)表达式 2)算数运算符 + - * / % 3)关系运算符 >  <  >=  <=  ==  != 4)逻辑运算符 &&   | ...

  10. 平时常用sql

    总结一下平时用到最多的sql语句 1.特殊日期 --今天凌晨 ,) --明天凌晨 ,,) --当周周一(每周从周日开始) ,) --当月的第一天 ,) --当月的最后一天 ,,,)) --今年的第一天 ...