程序员在工作中,常常会有绘制时序图、流程图的需要,尤其是在写文档的时候。平时咱们会抉择ProcessOn这类工具来绘制,但有时候用代码来画图可能会更高效一点,毕竟没有比程序员更相熟代码的了。明天给大家举荐一款画图工具PlantUML,能够配合IDEA应用,画图更高效!

SpringBoot实战电商我的项目mall(50k+star)地址:https://github.com/macrozheng/mall

PlantUML简介

PlantUML是一款开源的UML图绘制工具,反对通过文原本生成图形,应用起来十分高效。能够反对时序图、类图、对象图、流动图、思维导图等图形的绘制。

上面应用PlantUML来绘制一张流程图,能够实时预览,速度也很快!

装置

通过在IDEA中装置插件来应用PlantUML无疑是最不便的,接下来咱们来装置下IDEA的PlantUML插件。
  • 首先在IDEA的插件市场中搜寻PlantUML,装置这个排名第一的插件;

  • 有时候网络不好的话可能下载不下来,能够点击Plguin homepage按钮拜访插件主页,而后抉择适合的版本下载压缩包;

  • 下载胜利后,抉择从本地装置即可。

应用

接下来咱们应用PlantUML插件别离绘制时序图、用例图、类图、流动图、思维导图,来体验下PlantUML是不是真的好用!

时序图

时序图(Sequence Diagram),是一种UML交互图。它通过形容对象之间发送音讯的工夫程序显示多个对象之间的动静合作。咱们在学习Oauth2的时候,第一步就是要搞懂Oauth2的流程,这时候有个时序图帮忙可就大了。上面咱们应用PlantUML来绘制Oauth2中应用受权码模式颁发令牌的时序图。
  • 首先咱们须要新建一个PlantUML文件,抉择时序图;

  • 咱们能够通过PlantUML提供的语法来生成Oauth2的时序图,语法还是非常简单的,具体内容如下;
@startumltitle Oauth2令牌颁发之受权码模式actor User as userparticipant "User Agent" as userAgentparticipant "Client" as clientparticipant "Auth Login" as loginparticipant "Auth Server" as serverautonumberuser->userAgent:拜访客户端activate userAgentuserAgent->login:重定向到受权页面+clientId+redirectUrlactivate loginlogin->server:用户名+明码+clientId+redirectUrlactivate serverserver-->login:返回受权码login-->userAgent:重定向到redirectUrl+受权码codedeactivate loginuserAgent->client:应用受权码code换取令牌activate clientclient->server:受权码code+clientId+clientSecretserver-->client:颁发拜访令牌accessToken+refreshTokendeactivate serverclient-->userAgent:返回拜访和刷新令牌deactivate clientuserAgent--> user:令牌颁发实现deactivate userAgent@enduml
  • 该代码将生成如下时序图,用写代码的形式来画时序图,是不是够炫酷;

  • 本时序图要害阐明如下:

    • title能够用于指定UML图的题目;
    • 通过actor能够申明人形的参与者;
    • 通过participant能够申明一般类型的参与者;
    • 通过as能够给参与者取别名;
    • 通过->能够绘制参与者之间的关系,虚线箭头能够应用-->
    • 在每个参与者关系前面,能够应用:给关系增加阐明;
    • 通过autonumber咱们能够给参与者关系主动增加序号;
    • 通过activatedeactivate能够指定参与者的生命线。
  • 这里还有个比拟神奇的性能,当咱们右键时序图时,能够生成一个在线拜访的链接;

  • 间接拜访这个链接,能够在线拜访UML时序图,并进行编辑,是不是很酷!

用例图

用例图(Usecase Diagram)是用户与零碎交互的最简示意模式,展示了用户和与他相干的用例之间的关系。通过用例图,咱们能够很不便地示意出零碎中各个角色与用例之间的关系,上面咱们用PlantUML来画个用例图。
  • 首先咱们须要新建一个PlantUML文件,抉择用例图,该用例图用于示意顾客、主厨、美食家与餐馆中各个用例之间的关系,具体内容如下;
@startumlleft to right directionactor Guest as gpackage Professional {    actor Chief as c    actor "Food Critic" as fc}package Restaurant {    usecase "Eat Food" as uc1    usecase "Pay For Food" as uc2    usecase "Drink" as uc3    usecase "Review" as uc4}g--> uc1g--> uc2g--> uc3fc--> uc4@enduml
  • 该代码将生成如下用例图;

  • 本用例图要害阐明如下:

    • left to right direction示意按从左到右的程序绘制用例图,默认是从上到下;
    • 通过package能够对角色和用例进行分组;
    • 通过actor能够定义用户;
    • 通过usecase能够定义用例;
    • 角色和用例之间的关系能够应用-->来示意。

类图

类图(Class Diagram)能够示意类的动态构造,比方类中蕴含的属性和办法,还有类的继承构造。上面咱们用PlantUML来画个类图。
  • 首先咱们须要新建一个PlantUML文件,抉择类图,该图用于示意Person、Student、Teacher类的构造,具体内容如下;
@startumlclass Person {    # String name    # Integer age    + void move()    + void say()}class Student {    - String studentNo    + void study()}class Teacher {    - String teacherNo    + void teach()}Person <|-- StudentPerson <|-- Teacher@enduml
  • 该代码将生成如下类图,看下代码和类图,是不是发现和咱们用代码定义类还挺像的;

  • 本类图要害阐明如下:

    • 通过class能够定义类;
    • 通过在属性和办法右边加符号能够定义可见性,-示意private#示意protected+示意public
    • 通过<|--示意类之间的继承关系。

流动图

流动图(Activity Diagram)是咱们用的比拟多的UML图,常常用于示意业务流程,比方电商中的下单流程就能够用它来示意。上面咱们用PlantUML来画个流动图。
  • 首先咱们须要新建一个PlantUML文件,抉择流动图,这里应用了mall我的项目中购物车中生成确认单的流程,具体内容如下;
@startumltitle 生成确认单流程start:获取购物车信息并计算好优惠;:从ums_member_receive_address表中\n获取会员收货地址列表;:获取该会员所有优惠券信息;switch(依据use_type判断每个优惠券是否可用)case(0)    :全场通用;    if (判断所有商品总金额是否\n满足应用终点金额) then (否)        :失去用户不可用优惠券列表;        stop    endifcase(-1)    :指定分类;    if (判断指定分类商品总金额\n是否满足应用终点金额) then (否)        :失去用户不可用优惠券列表;        stop    endifcase(-2)    :判断指定商品总金额是否满足应用终点金额;    if (判断指定分类商品总金额\n是否满足应用终点金额) then (否)        :失去用户不可用优惠券列表;        stop    endifendswitch:失去用户可用优惠券列表;:获取用户积分;:获取积分应用规定;:计算总金额,流动优惠,应酬金额;stop@enduml
  • 该代码将生成如下流动图,在流动图中咱们既能够用if else,又能够应用switch,甚至还能够应用while循环,性能还是挺弱小的;

  • 本流动图要害阐明如下:

    • 通过startstop能够示意流程的开始和完结;
    • 通过:;两头增加文字来定义流动流程节点;
    • 通过if+then+endif定义条件判断;
    • 通过switch+case+endswitch定义switch判断。

思维导图

思维导图(Mind Map),是表白发散性思维的无效图形工具,它简略却又很无效,是一种实用性的思维工具。之前在我的mall学习教程中就有很多中央用到了,上面咱们用PlantUML来画个思维导图。
  • 首先咱们须要新建一个PlantUML文件,抉择思维导图,这里应用了mall学习路线中的纲要视图,具体内容如下;
@startmindmap+[#17ADF1] mall学习路线++[#lightgreen] 举荐材料++[#lightblue] 后端技术栈+++_ 我的项目框架+++_ 数据存储+++_ 运维部署+++_ 其余++[#orange] 搭建我的项目骨架++[#1DBAAF] 我的项目部署+++_ Windows下的部署+++_ Linux下应用Docker部署+++_ Linux下应用Docker Compose部署+++_ Linux下应用Jenkins自动化部署--[#1DBAAF] 电商业务---_ 权限治理模块---_ 商品模块---_ 订单模块---_ 营销模块--[#orange] 技术要点--[#lightblue] 前端技术栈--[#lightgreen] 进阶微服务---_ Spring Cloud技术栈---_ 我的项目部署---_ 技术要点--[#yellow] 开发工具--[#lightgrey] 扩大学习@endmindmap
  • 该代码将生成如下思维导图,其实应用PlantUML咱们能够本人定义图形的款式,这里我自定义了下色彩;

  • 本思维导图要害阐明如下:

    • 通过+-能够示意思维导图中的节点,具备方向性;
    • 通过[#色彩]能够定义节点的边框色彩;
    • 通过_能够去除节点的边框;

总结

尽管目前能够绘制UML图的图形化工具很多,然而对于程序员来说,应用代码来绘图可能更间接,效率更高,尤其是配合IDEA应用。如果你想应用代码来绘图,无妨尝试下PlantUML吧。

参考资料

官网文档:https://plantuml.com/zh/

本文 GitHub https://github.com/macrozheng/mall-learning 曾经收录,欢送大家Star!