当前位置: 首页 > 科技观察

PlantUML入门教程:像写代码一样画图

时间:2023-03-13 04:34:41 科技观察

我们都知道在软件工程中有各种各样的UML图,比如用例图、时序图等等。很多时候我们使用ProcessOn或者draw.io等画图工具来画图,但是它们都存在这样的问题:样式多样且不规范,拖拽效率低。其实这些问题和我们使用Word的时候类似,于是Markdown就诞生了。于是我想:能不能像写代码一样画图呢?果然,你能想到的,古人可能已经想到了,甚至还实现了!实际上有一个名为PlantUML的绘图组件可以让您在代码中绘制UML图。本文将简要介绍PlantUML,如何使用PlantUML画图,最后介绍如何使用PlantUML画几种常见的UML图。什么是PlantUML?PlantUML是一个允许您快速编写UML图的组件。这是官网对PlantUML的介绍。它允许您编写以下常见的UML图:序列图用例图类图对象图活动图(旧语法)组件图部署图状态图序列图此外,它还支持一些非UML图,例如:JSON数据YAML数据网络图(nwdiag)线框图形界面或UI模拟(Salt)架构图规范和描述语言(SDL)Ditaa图甘特图思维导图图工作分解结构(WBS)数学与AsciiMath或JLaTeXMath符号计算实体关系图(IE/ER)更多关于PlantUML的信息可以参考PLantUML官网。如何使用PlantUML?使用PlantUML绘图有两种方式,一种是使用PlantUML官网的在线编辑器,另一种是使用IDEAIntelliJ插件来编写。总体来说还是用Intellij比较方便,可以保存绘图代码,实时查看效果,复制生成的图片。因此,本次重点介绍如何使用IDEAIntellij绘制UML图。安装插件使用PlantUML画图,只需要在IDEA中安装PlantUMLIntegration插件即可,如下图:安装完成后重启IDEA。基本语法PlantUML文件都是以.puml为后缀的,我们只需要新建一个.puml文件即可。对于.puml文件,格式以@startuml开头并以@enduml结尾。也可以使用title设置UML图的标题,使用'单引号插入代码注释。基本的PlantUML图的代码框架如下:@startumltitle:title'comment(markedwithasinglequote)'UMLDiagramLogic@enduml不同类型的UML图有不同的语法。使用对应的UML图建议阅读PlantUML官网,现学现用效率最高,没必要强行背。常用UML图示例这里放几张我常用的UML图,分享一个代码示例,方便大家写图画图。对我来说,我经常使用用例图、序列图和ER图。用例图用例图是用户与系统交互的最简单的表达形式,它显示了用户与其他相关用例之间的关系。简单地说,通过用例图,我们可以知道用户与系统之间、系统与系统之间的功能。下面是一个博客系统管理后台的用例图:对应代码如下:@startuml'https://plantuml.com/use-case-diagramtitle文章管理用例图从左到右方向用户-->文章管理矩形文章管理{(文章管理)-->(查询文章列表):<>(文章管理)-->(新建文章):<>(文章管理)-->(查看articlecontent):<>(文章管理)-->(修改文章内容):<>}User-->CategoryManagementrectangleCategoryManagement{(CategoryManagement)-->(QueryCategoryList):<>(分类管理)-->(分类文章):<>(分类管理)-->(查看分类):<>(分类管理)-->(修改分类):<>}@enduml请注意,您需要安装Graphviz软件才能在Mac上使用PlantUML。如果以上代码不能正常渲染图形,可能是机器没有安装Graphviz软件。可以参考这篇文章解决:Can'trendercomponentdiagramwithPlantUMLinIntelliJ-StackOverflowsequencediagram时序图用来标识一个操作的全过程。通过时序图,可以清楚的知道一个操作的全过程和相关的参与者。下面是修改文章内容的接口时序图:上图对应的代码如下:@startuml'https://plantuml.com/sequence-diagramtitle修改文章内容autonumberparticipantuser的时序图参会前台页面参会管理后台用户->前端页面:点击修改文章按钮前端页面->前端页面:修改文章内容前端页面->管理后台:发送请求管理后台->管理后台:业务逻辑运行管理后台->前端页面:返回请求结果@endumlERGraphER图是用来表示数据库实体之间关系的图,通过ER图可以快速理清实体之间的关系.下面是文章、分类、标签的ER图。如果connection有fork,则表示N,如果没有fork,则表示1。比如category和posts的关系就是1:N。上图对应的代码如下:@startumltitlearticle,category,labelER图实体类别{*id:number<>---*name:varchar}entityposts{*id:number<>>>---*category_id<>}entitytags{*id:number<>---*name:varchar}'category:posts=1:Ncategory||--|{帖子的帖子:tags=N:Nposts}|--|{tags@enduml对于ER图来说,比较复杂的是实体之间关系的表示。事实上,PlantUML定义了几个符号来实现这个功能。一般规则如下:用--隔开,如果对应关系为1,则用||代表。如果对应关系为N,则使用|{或}|表示面向大括号的一侧表示N。比如:category和posts的关系是1:N,那么长期使用category||--|{posts。小结对于PlantUML,一开始只需要安装插件搭建本地运行环境,然后掌握PlantUML的基本语法即可。然后,根据自己的需要学习UML图对应的语法,灵活运用。