资讯详情

资讯详情

图示设计不简单:从架构图到流程图的认知负担优化

说起 diagram-design也就是图示设计很多人第一反应是画图还需要专门设计工具里拖几个框、连几条线不就完事了吗但凡是真正被一份架构图折磨过的人都知道同样一堆组件摆在那里有人画出来一眼就能看懂有人画出来就是一团乱麻。我自己这些年经手过的文档里十张图里能有三张称得上合格就算不错大部分图的问题不是信息错而是读图的人看不懂或者看得特别费劲。这篇文章想聊的就是 diagram-design 这件事本身。图示设计不是工具操作而是一套从目标拆解、信息组织、视觉编码到迭代验收的完整流程。这套东西对后端开发、前端开发、架构师、产品经理、技术写作者都适用。无论你是要画系统架构图、业务流程图還是时序图、状态图只要把下面这套方法吃透产出的图会有一个肉眼可见的提升。我会把原理讲清楚也会把我踩过的坑一一列出来。1. 图示设计到底在解决什么问题1.1 一张能看的图和一张好用的图差在哪先想一个最简单的场景两个开发者在同一个项目里各自画了一张模块调用关系图。第一张图里节点七零八落地放在画布上颜色用了八种连线横穿整个画布看了三十秒还没找到入口在哪里。第二张图里节点按调用顺序从上往下排同类模块用一种颜色关键链路用实线次要链路用虚线十秒之内你就知道数据是从哪进来、经过谁、最后落在哪个存储里。这两张图的信息内容可能一模一样但认知负担完全不是一个量级。图示设计的核心价值说白了就是降低读图者的认知负担。人家看图是为了快速理解一个系统的结构、一个流程的走向不是来玩解谜游戏的。如果你画完图需要站在旁边讲解十分钟别人才能看懂那这张图就是失败的因为它没有完成自我解释这个基本任务。我自己常用一个检验标准把图单独发给一个没参与项目的人什么都不解释看他能不能在十秒内说出这张图的主线是什么。能说出来说明这张图的骨架是对的说不出来问题多半出在信息层级和视觉引导上而不是内容本身。1.2 图示设计不是软件问题很多新手会陷入一个误区觉得画图丑是因为工具不够好于是花大量时间研究哪个绘图软件更好用、快捷键怎么记、模板库怎么装。我必须泼一盆冷水工具只是画布它解决的是能不能画出来的问题解决不了该画什么、怎么画、先画谁的问题。市面上那些自动布局功能确实能把一张图排得整整齐齐但那只是几何意义上的整齐。它不知道哪个组件是核心不知道哪条链路是主线更不知道读者应该先看哪里。自动布局的结果往往是技术正确、视觉失控——所有节点都摊开了主次全没了。我在实际项目中见过很多用自动布局导出的架构图每个方块间距都一致每条线都正交但整张图没有任何信息重点看起来像一张均匀撒了芝麻的饼。真正决定一张图质量的是画之前的决策哪些信息该上画布、哪些该藏在附录里、主线怎么排、重点怎么强调。这些决策工具替你做不了模板也替你做不了。所以 diagram-design 这门功夫练的是脑子不是手。2. 动手之前先拆解目标和信息结构2.1 给谁看图决定这张图长什么样我见过最普遍的失败原因是画图的人没想清楚读者是谁结果画出一张对所有人都不友好的图。给领导汇报用的架构图重点是系统边界、模块职责、主要数据流向你画一堆端口号和协议细节人家只会觉得你在炫技给运维排查用的部署图重点是实例数量、端口映射、依赖的外部服务你画一堆业务概念人家排障时照样找不到北。所以在落笔之前先花两分钟回答四个问题问题具体内容读者是谁开发、测试、运维、产品、业务方还是管理层关注粒度想看宏观边界还是想看内部实现细节背景知识是否需要解释领域术语、缩写、框架概念使用场景放进设计文档、PPT 评审、故障复盘还是新手 onboarding同一套系统完全可以根据读者画出完全不同的图。我曾经给一个业务系统画过三个版本给管理层看的版本只保留了请求进、订单出、账平了这条主线总共七个框给开发看的版本画到了服务间接口和异步消息的 topic 级别给测试看的版本则把每个服务的依赖关系都标了出来方便他们评估改动影响面。三张图内容详略完全不同但每一张都比一张图说所有事的版本有用得多。2.2 选对图的类型比画好更关键画图还有一个常被忽略的问题类型选错。流程图、时序图、状态图、架构图、部署图各有各的叙事逻辑。你要是把流程图画成了架构图的样子读者会忍不住去猜这些框之间的部署关系结果越看越糊涂。我的经验是先问自己一个问题我想表达的核心信息是谁依赖谁谁调用谁还是事情按什么顺序发生在什么条件下状态会变架构图回答系统由哪些部分组成、它们之间什么关系适合表达静态结构和依赖。流程图回答一件事是怎么一步步完成的适合表达动态过程、判断分支。时序图回答多个参与者之间按什么时间顺序交互适合表达接口调用序列。状态图回答一个对象有哪些状态、在什么事件下迁移适合表达生命周期。部署图回答组件跑在哪些节点上、网络怎么连适合表达物理环境。如果你发现一张图里既想画组件依赖又想画调用顺序还想画状态流转那不是在画一张图是在画一张会变形的怪物。正确做法是拆成多张图让每张图只讲一个故事。2.3 信息取舍少即是多但不是越少越好信息取舍是图示设计里最难的一步。新手容易什么都往上放觉得画得全就等于专业老手有时候又走另一个极端把图删得只剩骨架结果别人看不懂上下文。我自己常用三层过滤法。第一层必须画的内容包括核心链路、关键依赖、系统边界少一个读者就理解不了整体框架。第二层可以画的内容包括次要模块、旁路数据、配置项画面空间允许就放空间紧张就弱化处理。第三层不画的内容包括内部实现细节、与主线无关的历史包袱、可以用文字说明的琐碎信息。判断标准就一条删掉一个元素之后如果读者对这个系统是怎么转起来的理解没有实质影响那这个元素就可以降级或删掉。注意这里的少不是指节点数量绝对少而是指视觉负担少。一张图可以有二十个节点只要层级清晰、分组合理依然不算信息过载反过来只有五个节点但连线乱飞、颜色刺眼照样让人看不下去。3. 核心设计细节布局、配色、字体、连线3.1 布局网格对齐和留白是最便宜的品质提升很多图看起来业余问题往往不是内容而是布局节点对不齐、间距忽大忽小、框和线叠在一起。这些问题的修复成本极低效果却立竿见影。先说对齐。所有节点都应该在统一的网格上对齐要么按左边缘对齐要么按上边缘对齐。不同宽度的节点排在同一行时按中心对齐会显得乱按水平基线对齐会稳得多。间距也要有规矩同级节点之间保持等距分组和分组之间的留白至少是组内间距的一点五倍这样视觉上会自动形成块的感觉。再说留白。留白不是浪费是信息分隔符。画布被塞得满满当当的图和画布上元素疏密得体的图读起来完全是两种体验。我给自己的硬性要求是任何一组元素周围都要有呼吸空间线不能贴着文字走容器框和它里面的内容之间至少要留出内边距不然看起来像文字长在了框上。还有一个容易踩的坑自动布局。工具里的自动布局适合快速草稿不适合最终交付。因为算法只优化线不交叉和节点不重叠完全不在乎你的业务分层和阅读顺序。手动把节点按业务语义分组摆放哪怕稍微丑一点也比自动布局的可读性强得多。3.2 配色先定语义再谈好看颜色是图示设计里最有诱惑力也最容易翻车的东西。很多新手喜欢把每个节点都涂上不同的颜色觉得五彩斑斓才有设计感。实际上颜色一旦超过五种读者的大脑就开始被迫做颜色到语义的映射负担瞬间拉满。我推荐的方法是31配色原则。主色一种给核心模块或主线使用辅助色一种给次级模块使用强调色一种只用于警示、异常、关键路径剩下的全部用中性色包括背景、容器边框、普通文字。整张图跑到最后正式交付的版本里出现的主色系不会超过三种中性色不算在内。更重要的规则是颜色必须承载固定语义。同一个颜色在整张图里只能代表同一类东西不能一会儿表示用户端一会儿表示数据库。比如我在架构图里习惯用暖色代表外部系统、冷色代表内部服务、灰色代表基础设施这个约定从头到尾不改变。如果读者已经建立黄色外部的心智中途突然冒出一个黄色的内部模块整张图的信任感就崩塌了。另外提醒一点不要只靠颜色区分信息。打印成黑白、或者遇上色弱读者的时候仅靠颜色无法分辨的元素就成了废信息。我习惯在颜色之外叠加形状、边框粗细、虚线实线这些第二维度保证去掉颜色之后图依然可读。3.3 标注与文本图上每个字都要有作用图上的文字是很多人不重视的部分但恰恰是最影响专业感的地方。节点命名要短、要准优先用名词职责的结构比如订单服务消息队列配置中心而不是模块A组件B。缩写在第一次出现的地方要给出全称哪怕是在图注里。连线上的文本也大有讲究。很多人只会在线上标一个名词比如数据请求这种标注等于没标。好的标注应该说明动作和方向比如创建订单推送通知读取缓存这样读者才能顺着箭头讲出一个完整的动态场景。线的标注要确保不和线本身交叉实在放不下就放在线的上方并保持统一。字号也要分层。图的标题最大节点名次之注释和说明最小。我见过一些图字号全部一样大主次信息混成一团读起来既不知道看哪也不知道哪句话是重点。图注也是被低估的工具在图的底部放一行某系统的模块依赖关系箭头表示调用方向能省掉读者大量猜谜时间。3.4 连线的学问走向比样式更重要连线是图的骨架也是最容易画乱的地方。我见过一张图里三十条线从不同方向涌进同一个节点画布直接变成蜘蛛网。连线的基本法则是主流向必须一致要么统一从上到下要么统一从左到右。中途出现反向的线要用明显的曲线转折或标签提示读者这是一条回传路径。减少交叉是连线设计中值得花时间的优化。具体手法包括调整节点顺序、把跨层连线改成分组内短路、必要时在交叉处加折线桥接。如果一张图里有两组节点之间互相都有连接这种网状关系不适合用连线表达应该改用矩阵表格或者分组容器来表示。箭头方向也必须想清楚。箭头是表示调用方向、数据流向还是依赖方向全图必须统一并在图注里写明约定。很多图里箭头乱用一会儿指向被依赖方一会儿指向调用方读者还得自己推敲作者的语法这属于凭空给读者加负担。线型同样要有语义实线表示主链路虚线表示异步或旁路粗线表示关键路径细线表示一般关系定下来之后就不要随意切换。4. 实操从零到一设计一张系统架构图理论讲完我们走一遍完整的实操流程。我以一张典型的电商后端架构图为例带你看看从一堆需求描述到最终成图我具体是怎么操作的。4.1 第一步列出组件清单先不追求好看我会先找张纸或者新建一页草稿画布把脑子里能想到的组件全部列出来这个阶段不排序、不分类、不考虑颜色单纯是头脑风暴。比如这个系统可能涉及移动端、浏览器端、接入网关、用户服务、订单服务、支付服务、商品服务、业务数据库、缓存、消息队列、日志采集、监控告警、配置中心。列完清单之后我会把明显重复的合并把与当前要讲的故事无关的先挪到附录列表里。这时候往往能发现需求描述里的模糊点——比如购物车数据存在哪这个问题如果你连它属于哪个服务都不清楚那这张图画到后面一定会卡壳。先花十分钟把组件边界理顺比在工具里反复挪框节省的时间多得多。4.2 第二步确定分层结构和主链路组件清单出来后我会先画一个粗略的分层框接入层移动端、浏览器端、网关、应用层用户、订单、支付、商品服务、数据层数据库、缓存、消息队列。然后把横切关注点日志、监控、配置中心放在画布的侧面用虚线连到相关服务表示与所有服务都有关系但不在主链路上。主链路怎么定我按用户最核心的操作走一遍用户在客户端发起请求请求经网关鉴权后路由到订单服务订单服务校验库存调用商品服务、创建订单、发送支付请求到支付服务支付成功后再写数据库、发消息给消息队列做后续异步处理。这条链路就是图的骨架所有节点围绕它排布其余内容全是枝叶。这个过程我会在白纸上用简笔画草稿确定节点大概位置甚至不用打开绘图工具。草稿阶段速度最重要画错了改起来也快。我见过太多人直接跳到工具里精修结果发现布局思路错了整个重来白白消耗半天。4.3 第三步绘制初稿把草稿落到画布上打开绘图工具按照草稿把节点摆上去。以下是我最终完成前的中间版本示意你注意看它的分层、对齐和线的走向┌─────────────────────────────────────┐ │ 接入层 │ │ [移动端] [浏览器端] │ │ │ │ │ [接入网关] │ └──────────────────┬──────────────────┘ │ ┌───────────────────────┼───────────────────────┐ │ │ │ ┌──────▼──────┐ ┌────────▼────────┐ ┌────────▼────────┐ │ 用户服务 │ │ 订单服务 │ │ 支付服务 │ │ 登录/注册 │ │ 下单/改单 │ │ 支付/退款 │ └──────┬──────┘ └───┬────────┬───┘ └────────┬────────┘ │ │ │ │ ┌──────▼──────┐ ┌─────▼───┐ ┌─▼─────┐ ┌──────▼──────┐ │ 用户库 │ │ 订单库 │ │ 商品服务 │ │ 支付网关 │ └─────────────┘ └─────────┘ └─┬─────┘ └─────────────┘ │ ┌───────────────▼────────────────┐ │ 缓存/消息队列 │ │ 商品库存缓存 订单事件推送 │ └────────────────────────────────┘这张草稿的问题很明显左侧用户服务和右侧支付服务之间的层次线还不够整齐商品服务放在订单库旁边容易让读者误以为它属于数据层。于是下一步做调整把商品服务提到应用层和订单服务并列把支付网关挪到数据层外侧表示它是外部依赖最后把监控、日志这些横切组件放在最下方用虚线框出来。4.4 第四步自检与迭代直到一张图能自解释初稿画完我会做一轮系统自检问题清单如下主线链路能不能一眼找出来如果不能说明主链路节点没有和次要节点区分开需要加粗或调色。有没有连线交叉有交叉就调整节点顺序或者把跨层线改成容器内连线。同类元素的颜色、形状、线型是否一致有没有中途变卦的地方。节点名称是否能让没看过代码的人看懂所有缩写都必须有出处。和图配套的图注写清楚了吗箭头语义、颜色语义必须在图注里交代。把图缩小到缩略图大小主体信息还清晰吗如果缩成小图就糊成一片说明层级没有拉开。这轮自检的核心是换位思考假装自己是第一次看到这张图的人逐条顺着视线走一遍找出任何需要停顿思考的地方。停顿越少图越好。这一步做完我通常还会把图丢给同事看一眼什么背景都不讲只看反馈——如果对方问这个是干嘛的说明该信息没画清楚如果对方直接说这个链路很清晰基本就可以定稿了。5. 常见问题与排查技巧实录5.1 图越改越大节点越加越多怎么办这是所有人都会踩的坑。加一个节点很容易删一个节点很难于是图在迭代过程中只增不减最后变成一张谁都不愿意看的巨图。我的处理办法是设置单图上限一张正式交付的图主区域节点尽量控制在十五到二十个以内超过这个数就强制拆图。拆图不是随便切一刀而是按故事线拆分。架构图可以拆成总体架构图加局部细节图主图画边界和主干依赖细节图再展开每个模块的内部实现。文档里主图在上细节图跟着对应章节走读者先看全景再按需深入体验反而比一张大图顺畅得多。5.2 自动布局一跑所有手动调整全没了不少绘图工具都有自动整理布局按钮看着很方便但它是全局算法一按就帮你把整个画布重新摊开之前精心调整的分组、对齐全被冲掉。更麻烦的是有些工具保存时会静默重排你都不知道它什么时候动的。我的习惯是自动布局只用于草稿阶段的粗略摆放一旦进入精修阶段就完全手动控制。如果你需要几个节点局部对齐选中这一组节点单独做对齐操作不要触发全局自动布局。另外养成随手保存中间版本的习惯出问题至少能回退不至于一夜回到解放前。5.3 彩图看着挺好打印出来一片灰图在屏幕上五颜六色清楚得很但打印成黑白或者被复印之后层次全没了。我踩过这个坑之后养成了灰度测试的习惯作图过程中时不时把画布切换成灰度模式看一眼确认去掉颜色后依然能通过边框、线型、明度差异分辨元素。工程上还有一个相关的检查确保强调色和普通色之间有足够的明度差而不是仅靠色相区分。比如深红和浅灰放在一起去色之后依然一深一浅可以分辨而亮绿和亮黄这种相近明度的颜色去色之后就几乎分不出来了。5.4 导出图片模糊、文字飘了这是很常见但很多人懒得解决的细节问题。位图导出在缩放后很容易糊尤其是放到演示文稿里被放大时文字边缘全是锯齿。我的建议是能导出矢量格式就导出矢量格式需要嵌入文档时也优先用矢量如果平台只支持位图那就用高倍率导出宁可文件大一点也不要模糊。文字飘的问题多半出在字体上。图中用了本机安装的非常用字体换一台电脑打开工程文件时字体丢失自动替换成别的字体原本的对齐全部错位。稳妥做法是正式协作的图统一用系统内置字体或者导出时把文字转成路径彻底杜绝字体依赖。5.5 多人协作时一张图被改得面目全非团队协作时每个人按照自己的审美往同一张图上加东西很快就失去了一致性。我见过不少图被改得连主线都找不到了。想避免这个问题需要在团队里立一套简单的绘图规范不用多复杂几条就够颜色含义统一、线型含义统一、官方模板必须用、任何修改走评审。这套规范最好以文档形式固化下来贴在团队主页或者图模板附带的说明里。没有规范图就是每个人随手发挥的草稿有了规范多个人维护同一批图才不会崩坏。别忘了给图模板加上画布尺寸统一值不然有人用横版有人用竖版合并起来特别别扭。6. 一点实操心得画图这件事做多了之后你会发现最值钱的不是工具技巧而是迭代习惯。我几乎从来没一次画对过第一版永远是乱的真正让图变得可用的是后续那一轮轮修剪。所以别怕初稿丑丑是常态关键是留足时间做第二遍、第三遍。我现在的习惯是重要的图画完之后放一晚上第二天早上再看几乎每次都能发现前一天完全没注意到的问题——视觉疲劳这件事是真实存在的新鲜的眼睛总能看见旧眼睛看不见的东西。还有一个我想特别强调的点把图当代码来管理。源的版本控制、变更记录、评审流程一个都别少。图是设计文档的核心资产它和代码一样会腐化一样需要维护。我见过太多项目代码有完整版本管理图却是散落在各人电脑里的孤儿文件等到需要追溯当初的设计决策时谁也说不清。让图和代码享受同等的管理待遇长期收益远大于那一点点维护成本。最后分享一个小技巧每次定稿前把图发给一个和这个系统没有交集的人只问一句话——哪里看不懂对方迟疑的三秒就是你下一次改进的方向。这句话我用了很多年比任何绘图教程都管用。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →