PlantUML扩展实战:自定义图标与条件编译技巧
PlantUML扩展机制:自定义图标与条件编译实战
在架构设计过程中,标准组件可能无法完全满足特定场景的表达需求。本文将深入探讨PlantUML的三大扩展机制,帮助您创建更具表现力的架构图。
一、自定义组件图标(Sprite)
概念解析
Sprite是PlantUML提供的自定义图形绘制功能,通过ASCII字符定义矢量图标,可突破内置图形库的限制。
基础示例
sprite $service [16x16/8] {
0000000000000000
000FFFFFFF00000
00F8888888F0000
0F888888888F000
0F888888888F000
0F888888888F000
00F8888888F0000
000FFFFFFF00000
000000000000000
}
component "订单服务" as order $service
高级技巧
多色Sprite:使用十六进制颜色代码定义不同色块
sprite $auth [16x16/4] { 0000000000000000 0RRRRRRRRRRRRR0 0RGGGGGGGGGGGR0 0RGGGGGGGGGGGR0 0RGGGBBBGGGGGR0 0RGGGBBBGGGGGR0 0RGGGGGGGGGGGR0 0RRRRRRRRRRRRR0 000000000000000 }
实践建议:
- 使用在线Sprite编辑器(如plantuml-sprite-editor)简化创作
- 将常用Sprite定义放入单独文件,通过
!include
复用 - 保持Sprite尺寸一致(推荐16x16或32x32)
二、着色策略
按功能着色
skinparam component {
BackgroundColor<<API>> #FF9999
BackgroundColor<<DB>> #99FF99
BackgroundColor<<Logic>> #9999FF
}
component "用户API" <<API>> as api
component "订单服务" <<Logic>> as order
component "MySQL" <<DB>> as db
按层级着色
skinparam component {
BackgroundColor<<Presentation>> #F4CCCC
BackgroundColor<<Business>> #D9EAD3
BackgroundColor<<Persistence>> #C9DAF8
}
component "Web界面" <<Presentation>> as ui
component "订单服务" <<Business>> as order
component "Redis" <<Persistence>> as cache
实践建议:
- 建立团队统一的着色规范文档
结合包(Package)实现区域着色
package "前端" #lightblue { component UI } package "后端" #lightgreen { component Service }
三、条件编译(!ifdef)
环境差异化配置
!define PROD
!ifdef PROD
component "Redis集群" as cache {
[Master]
[Slave1]
[Slave2]
}
!else
component "Redis单节点" as cache
!endif
多版本架构图
!define V2
component "用户服务" as user {
interface "REST API"
!ifdef V2
[Auth Module]
!endif
[Core]
}
实践建议:
- 使用
!ifndef
实现否定条件判断 - 组合多个条件:
!ifdef FEATURE1 && FEATURE2
通过命令行参数动态控制变量:
java -jar plantuml.jar -DV2 diagram.puml
综合应用案例
!include sprites.puml
!define K8S
title 电商系统架构(生产环境)
skinparam component {
BackgroundColor<<Microservice>> #E6E6FA
BackgroundColor<<Data>> #F0FFF0
}
package "订单域" {
component "订单服务" <<Microservice>> $microservice
!ifdef K8S
component "订单DB" <<Data>> $k8s_db
!else
component "订单DB" <<Data>> $standalone_db
!endif
}
package "支付域" {
component "支付服务" <<Microservice>> $microservice
component "对账服务" <<Microservice>> $microservice
}
通过灵活组合这些扩展机制,您可以创建出既能准确表达架构思想,又具有视觉表现力的专业图表。建议从简单的Sprite定义开始,逐步掌握条件编译等高级特性,最终形成适合自己团队的PlantUML扩展库。
评论已关闭