说实话,我第一次认真琢磨“diagram-design”这个词,是几年前某次方案评审被问住了。当时我花了一晚上画架构图,自认为信息都有,结果会议室里大佬一句“你这张图到底让我看什么”把我说愣了。后来我才发现,画图这件事,大多数人的瓶颈从来不是工具不熟,而是没把“设计”两个字当回事。
所谓的 diagram-design,翻译过来就是图表设计,但它远不是选个模板拖几个框那么简单。图的本质是信息的组织方式和关系的呈现方式。同样一张系统架构图、业务流程图、数据关系图,设计得好,大家一眼看懂重点、直接进入讨论;设计得烂,所有人盯着屏幕猜线条含义,会议能活活拖长一小时。这篇文章我就围绕图表设计这一件事,系统讲讲我在实操中总结的核心思路、工具选型、完整落地流程和踩过的坑,适合经常画图的技术人、产品经理、数据分析师,以及所有需要在文档或汇报里用图表达逻辑的人。
1. “会画”不等于“会设计”:diagram-design 到底在解决什么问题
1.1 图的本质是“关系的可视化”,不是素材的堆叠
很多人画图,第一反应是“我有哪些模块”,然后往画布上一通摆。这是典型的素材思维,不是设计思维。图表设计的起点,应该是想清楚你要表达的关系是什么。这里的“关系”至少有三种常见形态,对应不同类型的图。
第一种是流程关系,强调时间顺序或因果链,典型场景是业务流程图、状态机图、审批流。这类图的关键是“下一步去哪”,所以箭头走向必须干净,分支条件必须醒目。第二种是结构关系,强调层级和归属,典型场景是系统架构图、组织架构图、目录树。这类图的关键是“谁属于谁、谁依赖谁”,所以容器、分层、边界这些视觉手段要比连线更重要。第三种是关联关系,强调节点之间的双向或多向联系,典型场景是ER图、知识图谱、依赖关系图。这类图最容易画成蜘蛛网,设计核心是控制连线数量,必要时用编号或颜色代替直接连线。
一张好的设计图,本质是把复杂关系压缩成一眼能扫完的信息结构。举个生活化的类比,你就把它当城市地铁图。地铁图的真实地理距离其实是失真的,但设计者故意调整了站点间距和走向,目的是让乘客能快速找到换乘关系。diagram-design 做的也是同一件事,为了让读者花最少的时间抓到最核心的结构,必要时牺牲部分真实细节是完全值得的。
1.2 先回答三个问题,再决定画不画
我现在的习惯是,任何画图需求落到手里,先强制自己回答三个问题,答不上来就先不动手。
问题一:这张图给谁看?给研发团队看,细节和接口名要给足;给业务方看,要淡化技术术语,突出节点和角色;给管理层看,要突出成本和风险,而不是内部组件。同一个系统,给三类人画,画出来的图完全是三张图,硬用一张图通吃,结果就是谁都不满意。
问题二:看完这张图之后,他需要做什么决定?如果答案是“评估订单系统的模块边界是否合理”,那你的图重心就应该放在分层和依赖关系上,数据指标一块都别放。如果答案是“新人照着图理解订单流转”,那你就得把每一步的操作角色和判断分支画清楚,没必要展示底层存储细节。
问题三:这张图的核心信息能在10秒内看出来吗?好的 diagram-design 有一个非常硬的标准:给一个完全没接触过项目的人看10秒钟,他能不能说出这张图的主题和大概结构。如果不能,说明你的层次划分、重点表达或视觉密度出了毛病。
这三个问题走完,你会发现很多“图”根本不需要画,一个列表就能说清楚;而真正需要画的图,目标和结构会非常明确。这套前置思考流程,省下的返工时间远超画图本身的时间。
2. 画图工具怎么选:不同场景下的 diagram-design 工具对比
2.1 四类主流画图工具的真实体验
工具是绕不开的话题。我这些年陆陆续续用过不下十款画图工具,现在把它们按工作方式分成四大类,每一类都有自己的适用场景和明显短板。
第一类是手绘松感在线白板,代表是 Excalidraw、Miro、boardmix。这类工具的典型特征就是笔触手写风、无限画布、多人实时协作强。我一般在需求讨论前期用它来做头脑风暴,因为随手画出来的东西不像“定稿”,大家敢提意见,不会像面对一张精美架构图那样有压力。缺点是画出来的图偏“草稿感”,很难直接当作正式交付物。
第二类是专业图表软件,代表是 diagrams.net(就是以前的 draw.io)、ProcessOn、Lucidchart。这类工具的强项是图形库丰富,泳道、容器、箭头、对齐工具都很成熟,导出的 PNG、SVG 质量高。我现在大部分正式交付的架构图都放在 diagrams.net 里画,因为它免费、支持本地文件、也能存云端,而且导出的 SVG 是矢量格式,无限放大不糊。缺点是部分工具样式稍显老旧,需要花一点心思在配色上。
第三类是代码驱动绘图,代表是 Mermaid、PlantUML、Graphviz。这种方式是“用写代码的方式生成图”,图的源文件就是文本,天然支持 Git 版本管理,改动可以走代码评审流程,这在团队协作里极其省心。我很多嵌入到 Markdown 文档里的流程图、时序图、状态图都直接用 Mermaid 写,改起来比拖拽图形快太多。缺点也很明显,复杂的大图用代码很难排得好看,布局控制力弱,稍微多点节点就乱飞。
第四类是设计工具,代表是 Figma。它强在像素级美学控制,适合做对外汇报的高保真图表、产品演示图、社区分享配图。缺点是为“画图”而用它有点杀鸡用牛刀,学习成本高,也没有专门的图算法和自动布局。
2.2 我总结的选型判断标准
工具没有绝对的好坏,只有匹配不匹配。我自己做选型时主要看五个维度,这里列一个对比表,大家可以照着自己的场景来套。
| 维度 | 在线白板类 | 专业图表类 | 代码驱动类 | 设计工具类 |
|---|---|---|---|---|
| 学习成本 | 极低 | 低 | 中高 | 高 |
| 多人协作 | 极强 | 中 | 靠 Git 协作 | 强 |
| 自动化布局 | 弱 | 中 | 自动,但不可控 | 极弱 |
| 可维护性 | 一般 | 中 | 极强 | 看文件管理 |
| 交付美观度 | 随意风 | 良好 | 中规中矩 | 极高 |
用这个表,基本就能把工具对号入座了。日常快速记录、理思路,用白板类;正式交付、做架构图,用专业图表类;嵌入文档、需要版本管理,用代码驱动类;对外宣传或者发布会级别的图,用设计工具类。
另外我想强调一个很容易被忽略的点:画图这类文件的可维护性比大多数人想象的更重要。现在很多项目图三个月后就没人维护了,不是不想改,而是源文件找不到、格式打不开、或者改了其中一块导致其他连线全乱。所以我现在对正式图表有一条硬性要求:必须有源文件,且源文件能被文本检索或版本管理,首选 SVG 源文件或文本格式,而不是一张只导出了 PNG 的图片。
3. 拿着一张图讲完整个项目:完整实操案例拆解
3.1 需求梳理:一张订单系统架构图的诞生前奏
理论讲再多,不如来一次完整的实操。这次我以“一张订单系统核心架构图”为例,从零开始走一遍我的完整流程。
第一步是需求梳理。这张图的受众是我所在的研发团队和参与架构评审的技术专家,目的非常明确:讨论微服务拆分时,确认清楚模块边界、核心依赖和数据流向。所以这张图不需要花哨的业务指标,也不需要标注具体的接口函数名,但必须把服务调用关系和数据存储归属表达准。
我先拿一张白纸,把系统里的核心实体全部列出来,这个过程相当于信息的“原料采集”。订单服务、商品服务、库存服务、支付服务、用户服务、物流服务,这是六个核心业务模块;MQ(消息队列)用来异步处理订单状态变更,Redis 用来缓存热点商品信息,MySQL 作为主存储存订单和商品数据,Elasticsearch 用来做订单查询搜索。列完之后你会发现,这其实就是一个最简单的信息清单,离图还很远。
此时我会顺手在清单旁边给每个实体标注角色:哪些是调用方,哪些是被调用方,哪些是基础组件,哪些是外部依赖。这个过程在纸上完成比直接开画图工具要快,因为不会被画布上的形状和颜色干扰,注意力完全集中在逻辑本身。
3.2 布局设计:从草稿到定稿的关键决策
原料齐了,接下来才是 diagram-design 真正发挥作用的阶段——布局。布局决定了读者阅读时的视线路径,我几乎所有图都遵循一个原则:主方向自上而下,次要关系再回头看。
对这张订单系统架构图,我用的是经典三层结构。顶层是接入层,放着 API 网关和对外接口,负责流量接入和认证。中间是业务服务层,六个业务模块平铺在这一层,它们之间的调用关系是这张图最核心的信息。底层是数据层,放着 MySQL、Redis、MQ、Elasticsearch,每个服务通过连线指向它依赖的存储或中间件。
这样分层之后,读者从上往下扫一遍,就能立刻明白“请求从哪里进来、业务在哪里处理、数据落到哪里”,逻辑非常顺。这里有个容易犯的错:很多人喜欢把所有节点堆在画布中央,结果同层节点不齐、跨层线条乱穿。我现在画图之前,一定会先手动规划好三个横向泳道区域,再用画图工具的对齐功能把所有节点吸附到网格上。
线条处理是另一个重点。我给自己定了个指标:一张图里的连线交叉点尽量不超过三处。比如订单服务和商品服务都要依赖 Redis,我不会分别拉两条线出来,而是在订单服务的右侧拉一条线到 Redis,商品服务通过容器边界或者相近路径汇入,这样视野里就是一束规整的连线,而不是一团乱麻。汇聚后再分发,是减少线条交叉最有效的手段。
3.3 视觉细节:颜色、字体、边框的克制搭配
布局定了,图能看懂,但距离“舒服”还有距离。diagram-design 的视觉设计要诀就两个字:克制。我见过太多图毁在一张图用七八种颜色、五种圆角风格、三个字号上,一眼看去花里胡哨,重点全丢。
配色上,我给自己定的规则是一张图主色不超过三种,其他颜色只允许用于警示或特殊标记。订单系统架构图里,我用了浅蓝作为接入层底色,浅灰作为业务服务层底色,浅绿作为数据层底色,三层边界一目了然。状态异常或者外部依赖的节点,才允许用橙色。这么做的逻辑很简单,颜色是语义系统,你把颜色都给得差不多重,读者反而分不清哪个颜色代表重要。
字体和字号方面也有固定套路。标题用一个字号,节点名称一个字号,节点下方或内部的补充说明一个字号,三级就够。中文环境我首选思源黑体或者微软雅黑,英文环境用 Inter 或 Arial,避免花哨字体。字号差距至少要有两个磅数,比如标题14磅、节点名12磅、注释10磅,这样层次感立刻出来。
边框风格也可以承载语义。实线代表强依赖或同步调用,虚线代表弱依赖或异步消息。这一点一定要做图例说明,否则只有你自己知道虚线什么意思。圆角我统一用较小的弧度,只在表达容器的时候使用,节点的圆角保持一致,防止风格混乱。
3.4 输出与交付:图不只是“画完”就结束了
图在画布上打磨完成后,最后一步是输出和交付。这一步很多人掉以轻心,直接截个屏扔到群里,过一个星期原图找不到了,又得重画。
我的处理方式是分场景选择导出格式:如果是放进设计文档或 PPT,导出 SVG 矢量格式,放大不糊;如果是发到群里快速同步,导出 PNG 2x 分辨率保证清晰度;如果是嵌入 Markdown 仓库文档,直接放 SVG 并用代码托管。源文件是我的底线,diagrams.net 的图默认会存成 .drawio 的 XML 文本文件,我会把它存进 Git 仓库,和代码一起走版本评审,任何人都能打开更新。代码类的 Mermaid 图更简单,全部是文本,理所当然地跟着文档走。
这里还要提一个常见的问题是字体大小和设备适配。PPT 投到投影仪上,原本 10 磅的注释字会小到看不清;放到手机里看,大图又会糊成一团。我的经验是,凡是用于汇报演示的图,正文字号至少做到 12 磅以上,并且导出时把画布四周留出适量留白,别让节点贴边。说到底,图是给人看的,交付场景决定了格式和尺寸,而不是反过来。
4. 常见问题与排查技巧实录
4.1 布局混乱、线条交叉太多怎么救
这是我从见过最多的问题,几乎每个人都经历过“画着画着变成一团毛线”。先说原因,绝大多数是因为你在画图工具里一边想结构一边画,画着画着发现少了个节点,顺手就补在了空白处,几轮下来布局必然乱套。
我的排查流程是这样:先把图导出或者截图缩小,眯着眼睛看整个结构。如果第一眼找不到主流程方向,说明层次乱了,重建。重建时不要在原图上继续拖,而是新建一页,照着纸上的信息清单重新摆。这次用对齐工具,每放一批节点就做一次横向分布和纵向等距。线条如果还是交叉,就用前面说的“汇聚后分发”思路,让多条依赖线先汇到一条总线或者同一个中间节点,再由它分发出去。几个指标供大家自检:主流程上不允许有回头线;同一层的节点底线对齐;线条交叉点全图不超过三处。只要这三条做到,这张图起码不乱。
4.2 文字溢出、字号忽大忽小怎么统一
第二种高频问题不是结构,是样式层面的。典型状态是:节点文字一会儿撑爆边框,一会儿缩成看不清;同样的层级,这个框 120 宽,那个框 160 宽。这种问题看着小,但它特别拉低图的专业感。
根子在于画图的人没有提前定义统一的样式模板。我现在每开一张正式图,第一步做的事就是定好一个标准节点模板,设置默认宽度、默认字号、内边距,再复制出其他节点。复制出来的节点继承同一套样式,从源头上杜绝了“大小不一”。如果文字太长装不下,我不会去拉伸这个框,而是把文字缩短,拆成多个节点或者提取关键短语。实在需要保留完整描述,就放进注释区或者补充说明区。注意,节点内部文字控制在 15 字以内,这是能保证阅读舒适度的经验值。
4.3 图改不动、协作冲突怎么破
最后一个是协作场景的痛点。最常见的情况是:团队五个人同时对一张架构图有修改意见,结果在线白板上你拖一下我拉一下,最后图也不知道被谁的版本覆盖了,矛盾不断。
我的应对策略是分层协作。第一层,整体结构修改必须走评审流程,不能在原图上随意动布局,先在文字上讨论清楚再动图。第二层,多人需要并行修改时,每人负责一个模块,在单独的图层或者副本上改,最后合并。第三层,尽量选择支持版本管理的方案,比如 diagrams.net 存 XML 到 Git,或者用 Mermaid 代码驱动画图,每次改动都能 diff,谁改了什么一目了然,有冲突也不会直接被覆盖,而是像代码一样合并冲突,可以理性解决。
说到底,“图改不动”的核心问题不是工具,而是没有把图当成代码一样管理。只要把源结构和版本记录两头都抓好,图表协作会顺畅很多。在我自己团队里,现在真正核心的架构图已经做到“每次评审改版都有历史记录”,再也不会出现三个月后没人敢动一张图的情况。这个习惯,一开始坚持有点麻烦,但一旦养成,受益非常大。