IDEA画图神器来了,比Visio快10倍!

最近在做系统设计的时候,发现要画不少时序图,以前我用的最顺手的工具是draw.io,后来也尝试了语雀自带的画图工具,感觉画画简单的图还行,但是复杂一点的,就比较吃力了。

图片

哎,这条线怎么又歪了?布局怎么又乱了?这个条怎么又对不齐了?……手忙脚乱才画好一张图,这时候我就想,有没有其它更专业的画图工具呢?大部分同事都在用Visio,辉哥给我推荐了PlantUML,说非常好用!这时候旁边来了一句—— “他就是装比!”

装比带我一个

装比带我一个

还有这样的事?那我不能让他一个人都装了。

最开始看下官方文档,发现PlantUML类似MarkDown,似乎需要一点学习成本,简单用了一下,曲线还是挺平缓的,上手相当快!推荐大家也用一下试试。

一、什么是PlantUML?

PlantUML是一个多功能组件,可快速、直接地创建图表。用户可以使用简单直观的语言起草各种图表。

PlantUML是一个开源工具,它允许我们用简单的文本描述来创建UML图,包括序列图、用例图、类图、对象图、活动图、组件图、部署图、状态图,以及我们今天要讲的时序图。

图片

除了UML图之外,PlantUML 还支持一系列其他图表,例如JSON数据、YAML数据、EBNF图表、架构图等等。PlantUML的一大优势,是图表完全用文本代码描述,这就意味着它可以作为文档嵌入到源代码中,也非常方便版本控制和多人协作,不管是迭代设计、文档编写、系统建模,PlantUML都能胜任。

二、快速入门

PlantUML插件

为了便捷地使用PlantUML,许多流行的IDE和代码编辑器提供了集成PlantUML的插件,如Visual Studio Code、IntelliJ IDEA、Eclipse等。插件提供了实时预览、语法高亮和图表导出等功能,能帮助我们更快捷,更高效地画图,整体上IDEA的插件用起来体验最好,但是IDEA大家懂的,太占内存了,VS Code相对而言,用起来就会轻量很多。

  • IntelliJ IDEA:比如 "PlantUML integration" 可以让我们直接在 IDE 中查看和编辑 PlantUML 图表

PlantUML integration

PlantUML integration

  • 插件使用效果

图片

  • VS Code:https://marketplace.visualstudio.com/items?itemName=jebbs.plantuml

    • 插件市场:

图片

  • 插件使用效果:

图片

Hello World!

我们先来看个最简单的例子,通过-> 、--> :就可以在参与者之间传递消息,不用明确声明参与者。

@startuml
老张 -> 老王 : 老王,你好啊
老王--> 老张: 老张,你好啊

老张 -> 老王: 最近有空一起喝茶
老张 <-- 老王: OK
@enduml

hello

hello

三、PlantUML时序图语法

接下来,我们看看PlantUML时序图的一些具体语法。

声明参与者

我们使用关键字participant 来声明参与者,就可以对该参与者进行更多的控制。声明的顺序就是默认的显示顺序。我们也可以用这些关键字来声明参与者,给参与者设置不同的形状。

  • actor(角色)

  • boundary(边界)

  • control(控制)

  • entity(实体)

  • database(数据库)

  • collections(集合)

  • queue(队列)

我们还可以通过 as关键字重命名参与者。

@startuml
participant Participant as Foo
actor       Actor       as Foo1
boundary    Boundary    as Foo2
control     Control     as Foo3
entity      Entity      as Foo4
database    Database    as Foo5
collections Collections as Foo6
queue       Queue       as Foo7
@enduml

参与者

参与者

默认的颜色比较单调,也可以通过#来设置参与者的颜色:

@startuml
actor Bob #blue
' The only difference between actor
'and participant is the drawing
participant Alice #SkyBlue
participant "I have a really\nlong name" as L #00ff00

Alice->Bob: Authentication Request
Bob->Alice: Authentication Response
Bob->L: Log transaction
@enduml

上颜色的参与者

上颜色的参与者

消息传递

在不同参与者之间,通过箭头+:来表示消息传递。

  • 同步消息:

A -> B: 同步消息文本

同步消息

同步消息

  • 异步消息:由发送者A指向接收者B,表示A发送后不需要等待B立即处理。

A ->> B: 异步消息文本

异步消息

异步消息

  • 返回消息:通常从接收者返回到发送者,标识一个回应。

A <-- B: 返回消息文本

返回消息

返回消息

  • 自调用:一个参与者直接发送消息给自己,表示自我处理或运算。

    A ->A: 自调用
    

    自调用

    自调用

生命线(Lifeline)与激活条(Activation Bar)

在时序图中,生命线表示对象在一段时间内的活动状态,也就是从参与者往下延伸的那条虚线。激活条用来表示参与者或对象在处理某个任务期间的活动状态,是生命线的一部分,矩形条形式出现。

  • 生命线的激活与撤销:可以用下面这些关键字来控制生命线的激活与撤销

    • activate: 显示参与者的活动状态开始

    • deactivate: 指示参与者的活动状态结束。

    • destroy: 用于表示参与者的生命线终结,通常表示对象生命周期的结束。

@startuml
participant User
User -> A: DoWork
activate A
A -> B: << createRequest >>
activate B
B -> C: DoWork
activate C
C --> B: WorkDone
destroy C
B --> A: RequestCreated
deactivate B
A -> User: Done
deactivate A
@enduml

生命线的激活与撤销

生命线的激活与撤销

  • 生命线的嵌套与颜色:我们还可以使用嵌套激活条来表示内部调用,并可以给生命线添加颜色。

@startuml
participant User
User -> A: DoWork
activate A #FFBBBB
A -> A: Internal call
activate A #DarkSalmon
A -> B: << createRequest >>
activate B
B --> A: RequestCreated
deactivate B
deactivate A
A -> User: Done
deactivate A
@enduml

生命线的嵌套与颜色

生命线的嵌套与颜色

  • 自动激活:在发送消息时自动显示激活条。

A->B++: 激活B并发送消息

自动激活

自动激活

  • 自动去激活:在接收回应时自动隐藏激活条。

A->B++: 激活B并发送消息
A <--B--: B去激活并回应消息

自动去激活

自动去激活

分组和替代

  • 分组:用于逻辑上分组一系列交互。

group 分组名
A -> B: 消息
...
end group

分组

分组

  • 替代(Alt/Else):表示基于条件的替代执行流程。

alt 条件1
A -> B: 满足条件1的消息
else 条件2
A -> B: 满足条件2的消息
end

替代

替代

注释

注释用于添加说明性文本。

  • 可以用note left of,note right of或note over来控制注释相对节点的位置,还可以通过修改背景色来高亮显示注释。

@startuml
participant Alice
participant Bob
note left of Alice #aqua
This is displayed
left of Alice.
end note

note right of Alice: This is displayed right of Alice.

note over Alice: This is displayed over Alice.

note over Alice, Bob #FFAAAA: This is displayed\n over Bob and Alice.

note over Bob, Alice
This is yet another
example of
a long note.
end note
@enduml

注释

注释

颜色

Choosing colors在 PlantUML 中,我们可以对时序图的各个元素自定义颜色,比如参与者(actors)、对象(objects)、激活条(activation bars)等,来让我们的时序图更加美观。在声明元素时,可以直接指定颜色,格式为#颜色代码。颜色代码可以是不同的形式:

  • 直接指定颜色:颜色代码可以是一个十六进制颜色值,也可以是预定义的颜色名称。

@startuml
actor 用户  #Green
participant 参与者  #B4A7E5

用户-[#red]>参与者:消息
activate 参与者 #Blue

@enduml

直接指定颜色

直接指定颜色

  • 使用 skinparam 设置颜色:除了直接为特定元素指定颜色外,还可以使用 skinparam 全局设置时序图中的颜色。用这种方式更改元素的默认颜色比较方便:

@startuml
skinparam ActorBorderColor #DarkOrange
skinparam ParticipantBackgroundColor #SkyBlue

actor 用户
participant 参与者
@enduml

使用skinparam设置颜色

使用skinparam设置颜色

当使用 skinparam 时,我们可以设置许多不同属性的颜色,如边框颜色(BorderColor)、背景颜色(BackgroundColor)、字体颜色(FontColor)和激活条颜色(SequenceGroupBodyBackgroundColor)。更多语法可以直接查看官方文档:顺序图的语法和功能,目前这些内容,已经足够我们常见的时序图需求了。

四、完整实例

我们接下来看一个稍微完整一点的例子,在这个例子中,我们的需求,是要在原本的登录的基础上,引入Google登录。

@startuml
skinparam ParticipantBackgroundColor #DeepSkyBlue

actor 用户 as c  #DeepSkyBlue
participant "客户端" as client
participant "服务网关" as ga
participant "用户服务" as user
database "数据库" as DB  #DeepSkyBlue
participant "Google服务" as google  #LightCoral

activate c #DeepSkyBlue
activate client #DeepSkyBlue

c->client:用户登录

group#LightCoral #LightCoral Google登录客户端流程
  client -> google : 请求Google OAuth登录
            activate google #DeepSkyBlue
            google-->client:登录url
            client->google:跳转登录页
            google -> google : 用户登录
            google --> client : Google登录Token
            deactivate google
end

|||

client -> ga : 登录请求
note right#LightCoral:新增登录方式,三方登录请求实体
activate ga #DeepSkyBlue
ga ->user:请求转发
activate user #DeepSkyBlue


alt#DeepSkyBlue 常规登录
    user -> DB : 查询用户信息
    activate DB #DeepSkyBlue
    DB -> user : 用户信息
    deactivate DB
    user->user:登录密码校验

|||
else Google登录
    group#LightCoral #LightCoral Google登录服务端流程
          user->google:验证token
          activate google #DeepSkyBlue
          google-->user:用户信息
          deactivate google
          user->user:存储或更新用户信息
    end group
end


user-->ga:登录结果
deactivate user
ga -> client : 响应
deactivate ga
alt#DeepSkyBlue 成功
        client -> c : 登录成功
else 失败
        client -> c : 登录失败
end
deactivate client
|||
@enduml

登录时序图

登录时序图

五、总结

PlantUML使用起来整体上还是非常舒服的,对我而言,这几个特点让我爱不释手:

  • 提供了类似MarkDown的所见即所得的使用体验,免去调整图形之扰

  • PlantUML本质是文本,可以进行版本控制,多人协同

  • 语雀支持文本画图的功能,可以嵌入PlantUML文本,支持在语雀文档里直接修改

PlantUML还有很强大的扩展性和灵活性,我们可以通过 官方文档:https://plantuml.com/zh/ 继续探索更多高级语法和技巧,来绘制更加复杂和丰富的图表。

<think>我们正在寻找用于绘制流程图的插件。根据引用内容,我们可以总结出以下几点: 1. 引用[1]提到亿图制作工具提供流程图模板,可以速创建图表。 2. 引用[2]推荐了Diagrams.net(即draw.io)作为绘制软件架构图的工具,它适合速草图,并且是免费的。 3. 引用[3]提到了Lucidchart Diagrams,这是一款绘图神器,但可能有免费和付费版本。 结合用户的需求(绘制流程图),我们可以推荐以下插件/工具: ### 1. Diagrams.net (draw.io) - **类型**:在线工具,也可作为桌面应用或插件使用 - **特点**: - 完全免费且开源 - 提供丰富的流程图符号和模板 - 支持多种导出格式(PNG, JPEG, SVG, PDF等) - 可以与Google Drive, OneDrive等云存储集成 - **适用场景**:速绘制流程图、软件架构图等 - **作为插件的使用方式**:可以作为VSCode插件(如“Draw.io Integration”)、Chrome插件,或者嵌入到Confluence、Jira等工具中。 - 引用[2]明确提到它是8个用于绘制软件架构图的画图工具之一。 ### 2. Lucidchart - **类型**:在线图表工具 - **特点**: - 提供专业的流程图绘制功能 - 协作功能强大,支持多人实时编辑 - 有免费版本,但高级功能需要付费 - 可以集成到Google Workspace, Microsoft Office, Confluence等 - **适用场景**:需要团队协作的专业流程图绘制 - **作为插件的使用方式**:提供浏览器插件,以及与其他办公软件的集成插件(如Google Docs, Slides的插件)。 - 引用[3]提到它是“绘图神器”,虽然引用中主要提到存储空间,但结合上下文,它是一款专业的绘图工具。 ### 3. 亿图图示(Edraw Max) - **类型**:桌面软件,也有在线版 - **特点**: - 提供大量预定义的流程图模板和符号 - 支持多种图表类型(流程图、组织结构图、思维导图等) - 有中文界面,适合国内用户 - 免费试用,但完整功能需要购买 - **适用场景**:需要丰富模板和符号的流程图绘制 - **作为插件的使用方式**:主要是独立软件,但可以导出为常见格式嵌入到其他文档中。不过,它可能不提供像前两者那样的插件集成。 ### 4. PlantUML(适合开发者) - **类型**:基于文本的绘图工具 - **特点**: - 使用简单的文本语言描述流程图,然后自动生成图表 - 可以集成到Markdown、VSCode等开发环境中 - 免费且开源 - **适用场景**:开发者喜欢用代码描述流程图的场景 - **作为插件的使用方式**:提供VSCode插件(如“PlantUML”)、IntelliJ IDEA插件等。 ### 推荐总结 1. **追求免费和开源**:选择**Diagrams.net (draw.io)**,功能全面且免费,插件支持丰富。 2. **需要团队协作**:选择**Lucidchart**,协作功能强大,但免费版可能有功能限制。 3. **喜欢使用模板**:选择**亿图图示**,模板丰富,但需要付费购买完整版。 4. **开发者**:选择**PlantUML**,用代码生成流程图,高效且易于版本控制。 ### 安装示例(以VSCode中使用Draw.io插件为例) 1. 在VSCode扩展商店中搜索“Draw.io Integration” 2. 安装插件 3. 新建一个`.drawio`后缀的文件,即可开始绘制流程图 ### 绘制流程图的基本步骤 1. 确定流程图的开始和结束点 2. 添加处理步骤(用矩形表示) 3. 添加判断点(用菱形表示) 4. 用箭头连接各个元素 5. 添加必要的注释 ### 注意事项 - 保持流程图简洁,避免过于复杂 - 使用统一的符号规范 - 定期保存备份 §§相关问题§§ 1. 如何选择适合团队协作的流程图工具? 2. 有哪些适合程序员的文本转流程图工具? 3. 流程图绘制的最佳实践是什么?</think>以下是针对流程图绘制需求的插件推荐,结合引用内容和实际使用场景: ### 一、专业流程图插件推荐 1. **Draw.io (Diagrams.net)** [^2] - **特点**:免费开源,支持在线/离线使用 - **集成能力**: - VS Code插件:`Draw.io Integration` - Chrome扩展:可直接嵌入浏览器 - 支持Confluence/Jira等平台集成 - **优势**:实时协作、版本历史、100+模板库 - 适用场景:技术架构图、业务流程建模 2. **Lucidchart** [^3] - **特点**:专业级工具,免费版基础功能完善 - **核心功能**: - 智能连线自动对齐 - 实时多人协作(最多3人免费) - 流程图转代码功能(伪代码生成) - **插件形式**: - Google Workspace插件(Docs/Slides) - Microsoft Office插件 - Slack集成 3. **亿图图示插件** [^1] - **特点**:中文环境优化,本地化模板丰富 - **突出优势**: ```mermaid graph LR A[预制模板] --> B[2000+行业符号] A --> C[一键美化] A --> D[Visio兼容] ``` - **安装方式**:Windows/macOS客户端提供Office插件套件 ### 二、开发者友好型工具 1. **PlantUML (VSCode插件)** - 通过代码生成流程图: ```plantuml @startuml start :登录系统; if (验证成功?) then (是) :进入主页; else (否) :显示错误; endif stop @enduml ``` - 优势:版本可控、适合敏捷开发 2. **Mermaid.js 插件** - 支持Markdown原生渲染 - 示例代码: ````markdown ```mermaid graph TD A[需求分析] --> B(设计) B --> C{评审} C -->|通过| D[开发] C -->|拒绝| B ``` ```` ### 三、选择建议矩阵 | 需求场景 | 推荐工具 | 关键能力 | |-------------------|----------------|------------------------| | 技术文档嵌入 | Draw.io插件 | 矢量图导出/SVG支持 | | 团队实时协作 | Lucidchart | 多人光标追踪/评论系统 | | 国企/教育机构 | 亿图图示 | 国标模板/离线审批流 | | 开发文档自动化 | PlantUML | CI/CD集成/文本驱动 | ### 四、流程图绘制最佳实践 1. **符号规范**(ISO 5807标准): - 椭圆=开始/结束,矩形=操作,菱形=判断 - 箭头方向始终保持从左到右/从上到下 2. **效率技巧**: - 使用`Ctrl+拖动`速复制元素 - 用`泳道图`区分责任部门(Draw.io支持) - 善用`自动布局`功能(Lucidchart智能排版) > 提示:简单流程图可用**draw.io免费版**,涉及企业流程管理建议使用**Lucidchart付费版**($7.95/月起)[^3],教育用户可选择**亿图教育授权版**(50%折扣)[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值