PlantUML 速成:用代码画图,让架构与流程可版本化
本站已开启 PlantUML 本地渲染。这篇示例博文用银行转账、DDD 聚合、贷款审批、AI 平台选型四个真实场景,演示时序图、类图、状态图与思维导图四种常用图表,全部由代码生成、随文章本地出图。
本站已开启 PlantUML 本地渲染(Oink v1.4.0 起,无需自建服务端)。只要文章里写 ```plantuml 代码块,页面会在浏览器端直接出图——图随源码进 Git,diff 看得清、久了也不会丢。下面四个例子都来自日常写架构文档的真实需求,复制即用。
一、时序图:银行转账的协作链
画跨系统交互,时序图最直观。这里把「渠道 → 核心记账 → 对账中心」的调用与异步推送画出来:
@startuml
skinparam sequenceArrowThickness 2
actor 客户
participant "渠道系统" as Channel
participant "核心记账" as Core
participant "对账中心" as Recon
客户 -> Channel: 发起转账请求
activate Channel
Channel -> Core: 借记付款户 / 贷记收款户
activate Core
Core --> Channel: 记账成功(流水号)
deactivate Core
Channel -> Recon: 异步推送交易明细
deactivate Channel
Recon --> Recon: 双边对账
@enduml要点:
activate/deactivate表示对象在一段时间内的活跃期;虚线-->是返回消息。跨栏目文章互相引用时,这种图能把「谁在何时调用谁」讲清楚。
二、类图:用 DDD 表达账户聚合
聚合根是 DDD 战术设计的核心。类图能把「Account 聚合包含 Transaction、受 TransactionLimit 约束」这种拥有关系画出来:
@startuml
class Account {
+ String accountNo
+ Money balance
+ open()
+ debit(Money)
+ credit(Money)
}
class Transaction {
+ String txnId
+ Money amount
}
class TransactionLimit {
+ Money dailyLimit
}
Account "1" *-- "0..*" Transaction : 包含
Account "1" *-- "1" TransactionLimit : 受限于
@enduml组合关系
*--表示「整体删除则部分一同删除」,正好对应聚合的不变式边界。
三、状态图:贷款审批的生命周期
状态机是业务规则最容易被遗漏的地方。用状态图把审批流转固化下来,新人一看就懂:
@startuml
[*] --> 申请中
申请中 --> 审批中 : 提交材料
审批中 --> 已拒绝 : 风控不通过
审批中 --> 已放款 : 审批通过
已放款 --> 还款中 : 首次还款
还款中 --> 已结清 : 本息还清
已结清 --> [*]
已拒绝 --> [*]
@enduml四、思维导图:对客 AI Agent 平台的模块切分
梳理技术选型时,思维导图比大纲更利于快速展开与收拢:
@startmindmap
* 对客 AI Agent 平台
** 编排层
*** 意图识别
*** 工具调用
*** 多轮记忆
** 管控层
*** 审计留痕
*** 权限隔离
*** 限流熔断
** 模型层
*** 统一 LLM 网关
*** 私有化部署
@endmindmap小结
| 图表类型 | 适用场景 | 代码块关键字 |
|---|---|---|
| 时序图 | 跨系统/跨服务调用 | participant + -> |
| 类图 | 领域模型、聚合边界 | class + *-- |
| 状态图 | 业务流程生命周期 | --> 状态迁移 |
| 思维导图 | 技术选型、方案拆解 | * 根节点 嵌套 |
把图写成代码,意味着它能进 PR、能被 review、能随文档一起演进——这正是架构文档该有的样子。本站已默认开启,直接在文章里写 ```plantuml 即可。