使用plantuml,业务交接就是这么简单

你好,我是轩脉刃。

最近交接了一个业务,原本还是有挺复杂的业务逻辑的,但发现交接过来的项目大有文章,在项目代码中有一个docs文件夹,里面躺着若干个 puml 文件,这些puml文件把业务中最核心的一些业务流程图和时序图都绘制清楚了。看到这个文件夹无异于发现了一个大宝藏。这种在代码中附带说明,代码即一切的做法我在开源项目也是这么做的,只是不知道,原来时序图还能使用plantuml如此编写,在这之前,我还都只用过画图软件绘制过时序图。学之,学之,于是就进入了plantuml的坑了。

plantuml 本身就是一个开源项目,在github上有它的仓库 https://github.com/plantuml/plantuml 和 组织 https://github.com/plantuml 。作者是Arnaud Roques,这里有一篇对他的访谈,聊到他创作plantuml的初衷是什么?“keeping the documentation up to date”。翻译过来叫“让交接项目的程序员少一些wtf”,哈,果然程序员的痛点都差不多。

plantuml 是使用java开发的,最早release版本应该是在2009年,我看github上至今仍然以1个月1个版本的速度发布release更新着。它最大的好处就是使用纯文本来绘制图形。是的,不仅仅是时序图,它可以绘制类图,流程图,部署图,甘特图,思维导图:

官方文档在:https://plantuml.com/zh/

比如我现在使用最多的就是它的时序图。(官方文档翻译为“顺序图”,而官方文档的“时序图”是时间线的意思)

https://plantuml.com/zh/sequence-diagram

这种复杂的分组流程

用下列简单的文本就能描述出来了。

@startuml
Alice -> Bob: 认证请求
Bob -> Alice: 认证失败
group 我自己的标签 [我自己的标签2]
Alice -> Log : 开始记录攻击日志
loop 1000次
Alice -> Bob: DNS攻击
end
Alice -> Log : 结束记录攻击日志
end
@enduml

颇为神奇。

plantuml支持的时序图的关键字我整理了一下。

  • actor(角色)
  • boundary(边界)
  • control(控制)
  • entity(实体)
  • database(数据库)
  • collections(集合)
  • queue(队列)
  • order(顺序)
  • as (别名)
  • \n(换行)
  • skinparam responseMessageBelowArrow true (文本对齐)
  • -> --> ->o ->> (各种箭头样式)
  • autonumber (自动对消息编号)
  • header (页眉)
  • footer (页脚)
  • newpage 分页
  • group (分组)
  • loop (循环)
  • note left ofnote right ofnote over (增加备注)
  • hnoternote 备注框形状
  • note across (多个参与者增加备注)
  • == (分隔符)
  • ref over (引用)
  • ... 延迟
  • maxMessageSize (文本最大长度)
  • || 限定空间
  • activatedeactivate (生命线激活,取消激活)
  • destroy (生命线消失)
  • return (返回)
  • create 创建参与者
  • ++ 激活目标(可选择在后面加上#color
  • -- 撤销激活源
  • ** 创建目标实例
  • !! 摧毁目标实例
  • [] 进入和发出
  • ? 缩短
  • teoz 瞄点和持续
  • << >> 构造类型
  • box 包裹参与者
  • hide footbox 移除脚注
  • [skinparam](https://plantuml.com/zh/skinparam) 改变外观

至于绘制的工具,各种ide目前已经都支持了。我自己在vscode和goland上都尝试过绘制非常大的时序图,goland的绘制会比vscode慢一些,甚至在这个plantuml比较复杂的时候,goland会出现内存不足,加载失败的错误。但是在vscode中,没有出现过。

在plantuml可以支持的类型中,目前最让我觉得有用的就是时序图和jsom/yaml 数据,时序图不用说了,对于json和yaml,一旦非常大的配置文件,使用json/yaml来进行描述,阅读起来是多么痛苦的事情,特别是yaml,需要对比锁进层次。而使用plantuml,能绘制出非常通俗易懂(逼格十足)的配置文件层次图,是非常爽的一件事情。

好了,后续交接项目的时候,别再写一大堆的wiki了,用用plantuml吧,让下任接手者为之惊艳一番。

参考文章:

https://modeling-languages.com/interview-plantuml/

https://plantuml.com/zh/

https://draveness.me/dsl/

使用plantuml,业务交接就是这么简单的更多相关文章

  1. PlantUML —— 应用于 Eclipse 的简单快速的 UML 编辑软件

    PlantUML —— 应用于 Eclipse 的简单快速的 UML 编辑软件 简介: 在应用系统软件开发过程中,如果软件由很多对象组成,它的结构仅仅凭借分析很难理清,同时为了有利于软件的开发及重用, ...

  2. Asp.NetCore轻松学-业务重点-实现一个简单的手机号码验证

    前言     本文纯干货,直接拿走使用,不用付费.在业务开发中,手机号码验证是我们常常需要面对的问题,目前市场上各种各样的手机号码验证方式,比如正则表达式等等,本文结合实际业务场景,在业务级别对手机号 ...

  3. 业务限流场景简单实现方案:RateLimiter

    前因:因为本系统中,有大数据高并发的场景.在向下游系统发送请求的时候,需要限流.否则会造成下游系统的堵塞. 实现方案1: Thread.sleep(ms). 优点:简单粗暴,一行代码搞定 缺点:有点l ...

  4. Winform DataGridView控件在业务逻辑上的简单使用

    需要对文字列表进行处理,然后用到DataGridView控件来处理,记录一下.效果如下: 主要是想通过禁用和取消单元格选择来使图标单元格呈现出鼠标点击的效果.因为有个单元格选择的问题困扰着我. 是这样 ...

  5. 拨乱反正:DDD 回归具体的业务场景,Domain Model 再再重新设计

    首先,把最真挚的情感送与梅西,加油! 写在前面 阅读目录: 重申业务场景 Domain Model 设计 后记 上一篇<设计窘境:来自 Repository 的一丝线索,Domain Model ...

  6. 【转】MySQL 高可用架构在业务层面的分析研究

    原文地址 http://database.51cto.com/art/201507/483463_all.htm 前言: 相对于传统行业的相对服务时间9x9x6或者9x12x5,因为互联网电子商务以及 ...

  7. MVC+Ef项目(4) 抽象业务逻辑层BLL层

    接下来,我们就要到业务逻辑层了,简单的说,业务逻辑层就是调用Repository(可以看做是DAL数据库访问层) 先来看看项目的架构 我们现在就开始来做BLL层.  同样,先编写  UserInfoS ...

  8. 如何监控业务的响应速度?Cloud Insight SDK 实践分享

    一直在说 Cloud Insight 是数据聚合平台,可以用 SDK 和 API 实现业务监控,如今不拿出点实践人们恐怕是不能信服.那今天本文就先简单介绍一下 SDK 可以应用在哪些方面,再举个真实用 ...

  9. DDD 回归具体的业务场景,Domain Model 再再重新设计

    DDD 回归具体的业务场景,Domain Model 再再重新设计 首先,把最真挚的情感送与梅西,加油! 写在前面 阅读目录: 重申业务场景 Domain Model 设计 后记 上一篇<设计窘 ...

随机推荐

  1. 基于WPF的酷炫GUI窗口的实现全过程

    title: 基于WPF的酷炫GUI窗口的实现全过程 date: 2020-08-14 permalink: /build/wpfgui sidebarDepth: 2 tags: wpf gui 软 ...

  2. 在Winform中直接录入表格数据和在Vue&Elment中直接录入表格数据的比较

    一般来说,录入数据的时候,我们都采用在一个窗体界面中,根据不同内容进行录入,但是有时候涉及主从表的数据录入,从表的数据有时候为了录入方便,也会通过表格控件直接录入.在Winform开发的时候,我们很多 ...

  3. SpringCloud升级之路2020.0.x版-38. 实现自定义 WebClient 的 NamedContextFactory

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 实现 WeClient 的 NamedContextFactory 我们要实现的是不同微服 ...

  4. restTemplate的问题-feign的项目

    restTemplate的问题  1.场景描述 在使用feign的项目中,偶然的使用到了restTemplate 在普通方法调用是可以访问的,一旦使用了restTemplate,出现报错 比如: 百度 ...

  5. 从零开始学Kotlin第五课

    函数式编程入门: package EL fun main(args: Array<String>) { var names= listOf<String>("tom& ...

  6. jmeter中执行kafka topic指令

    前置条件 kafka版本:2.2.1 jmeter版本:5.3 插件:ApacheJMeter_ssh-1.2.0.jar 1.拷贝 ApacheJMeter_ssh-1.2.0.jar 到/lib/ ...

  7. DirectX12 3D 游戏开发与实战第九章内容(下)

    仅供个人学习使用,请勿转载.谢谢! 9.纹理贴图 学习目标 学习如何将局部纹理映射到网格三角形中 探究如何创建和启用纹理 学会如何通过纹理过滤来创建更加平滑的图像 探索如何使用寻址模式来进行多次贴图 ...

  8. python——关变量下划线叙述

    _xx:前置单下划线,私有化属性或方法,一般来讲,变量名_xx被看作是"私有 的",在模块或类外不可以使用.当变量是私有的时候,用_xx 来表示变量是很好的习惯.类对象和子类可以访 ...

  9. 毕业设计之dns搭建:

    [apps@dns_sever ~]$ sudo yum install -y bind [apps@dns_sever ~]$ sudo vim /etc/named.conf // // name ...

  10. 利用vcftools比较两个vcf文件

    因为最近有一项工作是比较填充准确性的,中间有用到vcftools比较两个vcf文件. 使用命令也很简单: 1 vcftools --vcf file1.snp.vcf --diff file2.snp ...