编码前准备——UML图工具PlantUML

PlantUML是一个可以快速编写UML图的组件,画出来的图感觉比visio好看且专业;

可以内置Java开发工具IDEA插件,使用代码画图,逻辑更符合程序员思维;

如下:

1. 安装

插件在线下载地址:PlantUML Integration - IntelliJ IDEs Plugin | Marketplace

运行库地址:Download | Graphviz

配置方式:

IDEA的插件market:

2. 使用示例

安装好后邮件新增文件可选:

2.1 一般时序图

样式1:

代码:

@startuml
participant 联运客户端 order 1
participant 支付服务端 order 2
participant 大会员服务端 order 3 #99FF99

'skinparam responseMessageBelowArrow true

联运客户端 -> 支付服务端: 1.[HTTP]查询收银台信息
支付服务端 -> 大会员服务端: 2.[DUBBO]查询大会员产品信息及收银台样式
大会员服务端 -> 大会员服务端: 3.条件过滤/组装信息

支付服务端 <-- 大会员服务端: [DUBBO]返回收银台大会员产品渲染信息
联运客户端 <-- 支付服务端: [HTTP]返回收银台信息

@enduml

样式2:

代码:

@startuml
participant 游戏CP order 1 #99FF99
participant 开平API order 2
participant 数据库 order 3

autonumber
游戏CP -> 开平API: 创建测试计划 填写信息 保存
开平API -> 数据库: 查询是否存在流程中计划
开平API <-[#0000FF]- 数据库: 返回结果

alt 不存在流程中计划
    开平API -> 数据库: 入库内测游戏测试计划表
    开平API <-- 数据库: 返回测试计划ID
    游戏CP -> 开平API: 继续填写问卷 提交保存
    开平API -> 数据库: 入库问卷表
    开平API <-- 数据库: 返回问卷ID
    activate 开平API
    开平API --> 开平API: 测试计划关联问卷ID
    开平API -> 数据库: 更新内测游戏测试计划表记录
    deactivate 开平API
    开平API <-- 数据库: 更新成功
    游戏CP <-- 开平API: 返回测试计划提交成功
autonumber stop

else 存在流程中计划
autonumber 5
游戏CP <-- 开平API: 返回测试计划提交失败

end

@enduml

2.2 活动图

样式1:

代码:

@startuml
(*)  --> "byType-按照类型装配Bean"

If "" then
note right
是否找到bean?
end note

--> [Yes] If "" then
note right
是否使用@Qualifier?
end note

--> [Yes] "根据@Qualifier的名称找bean"
--> If "" then
note right
是否找到对应名称的bean?
end note
--> [Yes] "装配成功" #99FF99
else
--> [No] "装配失败" #9fc5e8
Endif

else
--> [No] If "" then
note right
是否仅找到1个bean?
end note
--> [Yes] "装配成功"
else
--> [No 找到多个] If "" then
note right
是否有配置@Primary的bean?
end note
---> [Yes] "装配成功"
else
---> [No] "装配失败"
Endif

Endif
Endif

"装配成功"-->(*)
"装配失败"-->(*)
Endif
@enduml

样式2:

代码:

@startuml
(*)  --> "byName-@Resource默认按照名称装配Bean"

--> [4种配置方式] "@Resource属性配置" #f4cccc

"@Resource属性配置" --> [case1:未配置] "默认使用name查找bean"
if "" then
note left
通过name找到bean?
end note
--> [yes] "装配成功" #99FF99
else
--> [No] if "" then
note left
通过type找到bean?
end note
--> [yes] "装配成功" #99FF99
else
--> [No] "装配失败" #9fc5e8
Endif
Endif

"@Resource属性配置" --> [case2:配置type和name] "使用name和type一起查找bean"
if "" then
note left
通过name和type找到bean?
end note
--> [yes] "装配成功" #99FF99
else
--> [No] "装配失败" #9fc5e8
Endif

"@Resource属性配置" --> [case3:仅配置name] "仅使用name查找bean"
if "" then
note left
通过name找到bean?
end note
---> [yes] "装配成功" #99FF99
else
---> [No] "装配失败" #9fc5e8
Endif

"@Resource属性配置" --> [case4:仅配置type] "仅使用type查找bean"
if "" then
note left
通过type找到bean?
end note
---> [yes] "装配成功" #99FF99
else
---> [No] "装配失败" #9fc5e8
Endif

"装配成功"-->(*)
"装配失败"-->(*)
@enduml

样式3:

代码:

@startuml
note right #cc3333
  [起始]
end note
(*)  --> "扫描新游内测申请表"
partition LOOP所有有效记录 #CCDDEE {
--> "通过内测新游包名查询(游戏中心)上下架状态"
If "" then
note right #99EE99
  是否与当前上下架状态不一致?
end note

--> [Yes] "更新该条记录"
--> If "" then
note right #99EE99
  上架变更/下架变更?
end note
--> [上架变更] "通知用户运营平台创建通知II计划(幂等)"

else
--> [下架变更] "V消息告知运营"
Endif

If "" then
note right #99EE99
  内测计划是否已经开始?
end note
--> [Yes] "不做处理"

else
--> [No] "通知用户运营平台取消通知II计划(幂等)"
Endif

else

}
-------> [No] ===B1===
Endif

"不做处理" --> ===B1===
"通知用户运营平台创建通知II计划(幂等)" ---> ===B1===
"通知用户运营平台取消通知II计划(幂等)" ---> ===B1===

===B1=== -->"任务结束"
-->(*)
note right #cc3333
  [终止]
end note
@enduml

样式4:

代码:

@startuml
note right #cc3333
  [起始]
end note
(*) --> "已提交审核的测试计划列表"
"已提交审核的测试计划列表"--> "查看已提交审核的测试计划详情"
note right
  角色:游戏运营
end note
If "" then
note right #99EE99
  是否审核通过?
end note

partition 通知 #CCDDEE {
--> [Yes]===B1===
---> [通知CP]"(站内信)通知CP该计划审核通过"
--->===B2===

===B1=== ---> [通知下游]"1.通知C端-同步测试计划物料 2.通知用户运营平台-创建问卷通知计划"
--->===B2===

}
--->(*)
note right #cc3333
  [终止]
end note

else
--> [No] "(站内信)通知CP审核不通过及原因"
If "" then
note right #99EE99
  当前审核计划是否过期(不可编辑)?
end note
--> [Yes](*)
else
-----> [No] "重新提交"
note right
  角色:游戏CP
end note
"重新提交" ---> "已提交审核的测试计划列表"
Endif


@enduml

样式5:

代码:

@startuml
(*)  --> "收银台支付结果消息"
note right #99EE99
  [入参]:
  用户openid
  扣减金额deductAmount
  订单号orderNo
  业务类型bizType
end note

If "" then
note left
deductAmount = 0?
end note
partition "收银台未使用预支礼券" {
--> [Yes] "[ 现有逻辑 ]\n1. 用户身份信息更新 (立即成为会员/延长1个月周期)\n2. member_period记录状态为'1-待发放'\n3. 当前购买的会员月 发放N张无门槛券"
-->(*)
}
else
    partition "收银台使用预支礼券" {
    --> [No] If "" then
    note left
    deductAmount等于bizType配置下无门槛券面额?
    end note
        --> [Yes] If "" then
        note left
        用户是否已经是大会员生效状态? (如跳转H5开通)
        end note
        --> [Yes] "1. 监控异常用户行为\n2. member_period记录状态为'6-待发放-已用虚拟礼券'\n3. 当前购买的会员月到来时由定时任务发放N-1张无门槛券"
        -->(*)
        else
        --> [No] "[ 现有逻辑 ]\n1. 用户身份信息更新成为会员\n2. member_period记录状态为'1-待发放'\n3. 立即发放N-1张无门槛券"
        -->(*)
        end if
    else
    --> [No] "1. 监控异常数据\n2. 系统告警"
    "1. 监控异常数据\n2. 系统告警"-->"[ 现有逻辑 ]\n1. 用户身份信息更新 (立即成为会员/延长1个月周期)\n2. member_period记录状态为'1-待发放'\n3. 当前购买的会员月 不发放门槛券(告警) 仅发放其他会员权益"
    -->(*)
    }
    end if
end if


@enduml

样式6:

代码:

@startuml
(*)  --> "下单请求"
note right
  入参:
  用户openid
  产品id productId
end note
If "" then
note left
用户身份满足下单条件?
end note
partition 下单成功 {
--> [Yes] If "" then
note left
根据productId判断是否签约订单?
end note
--> [Yes] "返回订单号+签约单号(签约标识)"

--> "返回下单成功"
else
--> [No] "返回订单号"
}
Endif
--> "返回下单成功"
-->(*)
else
--> [No] "返回因身份互斥导致下单失败的状态码"
--> "返回下单失败"
-->(*)
Endif
@enduml

导出

建议导出格式为svg格式,可以使用浏览器打开,也可以使用visio打开继续编辑,不失真;

3. 教程

参考:开源工具PlantUML官网 使用手册

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值