资讯动态

diagram-design:让架构图、流程图、时序图一眼看懂的设计方法

发布时间:2026/10/21 19:37:00 来源:尧图企业网站定制
你有没有经历过这种尴尬同事往群里丢了一张系统架构图你放大、缩小、横着看、竖着看就是搞不清楚消息到底从哪个服务出来、又进了哪个库。然后你问了一句“这里是不是有点绕”对方立刻叹了口气开始把每个框的含义从头讲起。这种场景我见得太多次了。后来我在自己参与的技术评审里加了一条规矩——要上台讲的图必须先过一遍我下面讲的这套 diagram-design 检查不然就回炉。这里的 diagram-design不是专业平面设计师的那套视觉语言而是指我们在软件系统、业务流程、技术方案里真正需要的那类示意图架构图、流程图、时序图、状态图、部署图。它的本质是信息组织方式——先把要表达的信息按层次拆开再决定用什么样的图形语法呈现最后处理可读性。很多人以为画图最难的是工具操作其实恰恰相反。工具只是最后一步真正的难点在于你愿不愿意在画图之前先逼自己想清楚哪些信息必须出现哪些信息可以弱化。这篇文章就把我这几年反复用得上的那套方法完整讲一遍。不管你是刚开始写方案的新人还是已经在带项目的负责人按照这里的思路去整理你的图基本都能让读者少问两句“这线是什么意思”。1. diagram-design 不是画图是信息权重的设计1.1 一张图需要同时承载三层信息我习惯把一张有效图的信息拆成三层看。第一层是结构层。读者第一眼要看清楚这个系统里有哪几个模块边界在哪里。比如一个订单系统至少得有用户侧、订单服务、支付服务、库存服务、数据库。这一层解决的是“有什么”。第二层是语义层。模块之间的关联是什么数据往哪流状态怎么切换。比如支付成功之后是去扣库存还是先改订单状态这属于“做什么”。第三层是变化层。正常路径之外有没有异常分支、回滚路径、补偿逻辑。大部分图的第一版都会丢掉这一层所以评审时被问得最凶的也往往是这一层。这三层不是要求你全都画进一张图里。真正的高手会判断当前这张图的核心读者是谁当前要回答的核心问题是什么。如果是讲给运维听服务端口和主机关系就是核心业务状态反而要弱化如果是讲给产品看数据流转路径和异常分支才是重点服务器型号、网络带宽这些一笔带过甚至不画。图的信息量不是越多越好。每增加一个节点读者的扫视成本是线性增长的但每增加一条交叉连线阅读成本是近似指数级增长的。画得满满当当的图看起来是在“展示工作量”实际上是在消耗读者信任。1.2 信息过载是 diagram 的第一杀手我见过一份系统现状图把十几个服务、四十多条调用线、五条消息队列、三个数据库全部塞进一页。作者很自豪说“所有信息都在这了”。结果评审会上没有人能指着图说清楚一个最简单的链路用户下单之后系统到底做了什么。从那以后我给自己定了一个原则一张图只回答一个问题。如果这张图要回答“用户下单后的完整链路”那服务依赖细节就放进另外一张图。同一个系统可以有三张图一张面向业务讲述主链路一张面向研发描述服务依赖一张面向运维描述部署拓扑。这不是画三遍而是同一个系统的三个抽象层次。判断图有没有信息过载有个很笨但有效的办法把图缩放到 50%如果缩到这么小之后完全没法阅读说明你需要拆分而不是继续放大。因为大多数读者第一眼看到图时都是在缩略状态下扫视的只有觉得“有点兴趣”之后才会放大看细节。缩略图看不清等于你丢失了绝大多数读者。1.3 先有抽象层次再有坐标位置很多新手画图的顺序是反的先拖一个画布然后凭感觉把方框摆在中间再连线最后发现没地方放新框了就开始压缩、绕线、把图越改越乱。正确顺序应当是先确定这张图的抽象层次和信息范围再决定布局。就好比写文章之前先列大纲而不是先写句子再决定分几章。我通常会用十分钟在纸上只写名词用户、订单、支付、库存、消息、数据库。然后给这些名词分组比如归为前端层、业务层、基础层或者归为正常路径、幂等处理、异常补偿。名词和分组一旦稳定画布上的坐标只是摆放问题。这一步想清楚了后面的工具操作只是体力活。反过来如果连这张图到底要表达哪个层次都没定换什么工具都是白搭。2. 一套能直接照用的 diagram-design 工作流2.1 第一步穷举信息先别急着开画布我先说一个大多数人不爱听的经验打开画布之前先打开一个空白文本文件把这张图里所有可能出现的名词全部列出来。不用排序不用管层级只要你能想到的全部写下来。比如画一个“订单退款流程”你先列用户、商家后台、退款申请、订单服务、原支付单、退款网关、通知服务、人工审核、拦截规则、优惠券回补、库存回补、结果通知。这一步的核心目的是把脑子里的隐性信息全部“外置”出来。你会发现有的名词之间关系并不清晰原因不是你不会画图而是你根本没有完全想清楚业务。列完之后做一个动作给每个名词打一个标签。可以是动词性标签处理、校验、调用、名词性标签实体、存储、外部系统。这个标签决定了后面用什么样的图形符号来表达它。习惯这么做之后你画出来的图会天然带着逻辑性而不是方框与方框之间的随意拼接。2.2 第二步确定图型不要方框走到黑信息清单出来之后再决定用哪一种图型。很多人从头到尾只用一种矩形箭头图这是把 diagram-design 看得太窄了。我给自己做了一个快速选择的标准信息特征适合的图型可表达的重点多个模块之间的层级与依赖架构图边界、分层、依赖方向分支/判断多、状态迁移明显流程图分支条件、异常路径时间先后强、参与者交互频繁时序图消息顺序、异步通知对象实体之间的关系ER 图主外键、基数关系系统状态的合法变化状态图事件驱动的状态迁移选型的时候有一个四字口诀以表达确定形式。比如你要画的消息链路里最强调的点是“先下发通知再更新本地状态”那必然是时序图如果最强调的点是“服务 A 依赖于服务 B但 B 不允许反向调用”那架构图更合适。2.3 第三步先画线稿骨架再处理对齐和配色信息清单有了图型也定了这时候才轮到打开图形工具。但第一版画出来的一定是“线稿版”所有节点先用最朴素的长方形放上不调圆角、不改配色、不做阴影先把位置和连线确定下来。这一步我特别想强调。很多人画图的时候一边摆框一边美化结果搭出来的骨架是扭曲的为了把某个配色匹配好强行把一个本该挨在一起的节点挪走最后导致连线绕了一大圈。这是典型的“先装修后砌墙”。骨架阶段只需要检查三件事第一主流程是否遵循从左到右或者从下到上的阅读顺序第二有没有箭头交叉穿过无关模块的情况第三各个分区有没有明显一大块空白或一大块拥挤。这三项过关之后再去调圆角、颜色、字体、阴影。顺序反了你会浪费大量时间在重复调整上。2.4 第四步导出之前标注图的“读法”一张合格的工程图应该能在不被口头解释的情况下自明。但现实是图里总有一些约定的简写或者隐含规则。我的解决方案是在图的角落加一个“读法说明”区三到五条每条一句话。比如实线表示同步调用虚线表示异步通知红色表示异常链路灰色表示后续规划。这就是图例。图例不是装饰它是降低认知负荷的关键。没有图例的图读者第一次看到颜色和线型时只能靠猜有了图例读者会把注意力直接放到业务链路本身。这一小步看着简单实际能减少大量沟通成本。我在一次方案评审里做了实验同一张部署图带图例的版本参会者平均看懂时间约 30 秒不带图例的版本好些人花了 3 分钟还在追问某个蓝色虚线框是什么含义。3. 节点、连线、布局图解的基础视觉语法3.1 节点的形状是有语义的不要乱用在这个问题上我可以说吃过大亏。早年间我画图很随意圆角矩形、直角矩形、菱形、圆柱体混着用全凭当天的心情。结果图是画完了但每次给别人讲的时候都要额外解释几十句。后来我干脆引入了一套固定语义并且要求团队内统一图形符号语义约定典型使用场景圆角矩形处理动作 / 服务服务、函数、操作步骤直角矩形实体 / 模块 / 边界数据库表、外部系统、模块框菱形判断 / 分支条件校验、分支路由圆柱体存储数据库、缓存、消息队列圆开始 / 结束流程入口和出口图形语义统一之后读者看一眼形状就能分辨“这是一个动作还是存储”不需要读里面的文字。这个东西极有价值因为人的视觉处理对形状的辨识速度远快于对文字的理解速度。3.2 线型和箭头方向感是阅读的第一驱动力线是图里的动词。节点和节点之间的线表示它们之间存在某种关系而线的样式表达这种关系的具体属性。我习惯把线型划成三个档次。主流程用最粗的实线表示核心链路的走向附属关系用普通实线表示常规依赖弱化或异步关系用虚线表示非实时、可延迟、后置通知。如果能用颜色区分更好比如主链路用深色辅助链路用浅色异常链路用暖色。但要记住颜色不能作为唯一的信息通道因为有色弱读者也经常有人把图打印成黑白版本。所以线型差异必须和颜色差异同时存在。箭头方向同样值得讲究。很多人画图时箭头指向的语义不一致一会儿表示数据流向一会儿表示函数调用方向。读者一旦捕捉到这个歧义整张图的信任度都会下降。建议一个项目里只保留一种箭头语义比如统一认为箭头表示“趋势或调用方向”反方向的数据返回用虚线表达而不是每个箭头都画双向。3.3 布局的黄金原则交叉最少化与层次递进布局层面的最高原则只有一条尽量让线不交叉。交叉的不是线是读者的注意力。交叉越多读者需要强行记忆的信息点就越多。所以摆放节点的时候我习惯先摆主路径上的节点再摆支路节点最后把外部依赖节点贴到画布边缘。主路径的摆放方向我默认选择 自左向右。这是绝大多数人阅读文字时的自然方向从左到右看一个请求从发起到落库比从右往左顺得多。某些场景下用自下而上表示“底层基础设施承载上层业务”效果也很好但千万别在同一张图里混用两种方向。除了方向还要保持层次递进。举一个例子一个系统从用户端到数据库的完整链路。如果把节点全部摆在一条水平线上读者看的时候需要记住哪个属于接入层、哪个属于业务层。而如果你把接入层放在最上方、业务逻辑放中间、基础设施放最下方那么垂直方向本身就表达了一层递进关系读者会自动把上下位置理解为主从或分层关系。4. 架构图、流程图、时序图三类高频图的差异化设计4.1 架构图分层比模块更要紧架构图的难点不在于把模块画出来而在于把模块之间的边界和依赖关系表达清楚。我的经验是先画边界后画模块。所谓边界就是分层线。比如前端界面层、网关层、业务服务层、数据存储层、第三方集成层。先画几条横向的泳道再往上摆模块天然就建立了纵向的层级逻辑。依赖方向也非常关键。好的架构图依赖方向应该尽量单向上层依赖下层或者左侧依赖右侧。如果出现大量双向依赖说明系统本身的边界设计有问题图里只能很诚实地把它暴露出来。这反而是架构图最重要的价值——它不太应该为了美观而掩盖设计缺陷否则评审时反而会埋雷。4.2 流程图分支条件写进图形而不是留在嘴流程图我踩过的坑比较典型分支条件写得含糊其辞对不上的岔路最后靠口头解释。比如说“支付成功后判断是否有可用优惠券”这个判断框往往只写“是否可用”三个字但“可用”的定义是完全没进去——是有库存是未过期还是满足使用门槛后来我强制自己把判断条件拆完整一个判断框内写不可再拆分的判断条件条件结果必须和箭头旁边的文字完全对应。比如箭头标注“可用走券核销”另一个箭头标注“不可用走原价结算”。这样处理之后流程图不再需要人为演示才能被理解它自己就能承担比文字更精确的传达。还有泳道选择的问题。如果你这张流程图里涉及多个角色或多个系统来回交接我建议立刻转成泳道图。每个角色有自己的泳道所有箭头天然带着“这个动作是哪个角色发起的”信息。不用泳道的跨角色流程就像开会不点名一样混乱。4.3 时序图消息顺序比对象位置更值钱处理异步调用和事件通知这类场景时时序图往往是唯一说得清的图型。它的核心不是“谁调谁”而是“消息在时间轴上的先后顺序”。我在画时序图时会把参与者排开成竖线从上到下严格按时间流逝来排消息。这个约束看着简单但它能逼你把整个事件流从“第一笔请求”推到“最终状态落库”中间每一个回调、通知、超时都不能跳过。时序图里最容易忽略的是回复与确认。很多时序图只画调用箭头不画返回箭头导致读者不知道结果是什么时候回来的。我的习惯是请求用实线箭头返回用虚线箭头并且在返回上标注成功或失败。这样一来读者不仅能看出系统的交互链条还能一眼看出哪一步可能成为瓶颈。5. 反复踩坑后才看清的几个 diagram 设计问题5.1 图越改越大最后没人看我发现一个非常普遍的规律图的第一版通常还能看等到第二轮补充需求进来很多人直接在原图上追加模块第三轮又追加几条虚线第四轮再加两个文本框。不到两周这张图内容量膨胀到无人愿意打开。这种问题的根源是把图当成了“信息记录容器”而不是“信息传达工具”。图不是用来记录所有事实的它是用来让读者在特定目标下最快形成认知的。如果新信息对当前目标没有直接贡献你就不应该把它塞进这张图如果有贡献但会让图超过十几个节点你应该拆新图而不是叠上层数。我建议团队里的图单张不得超过 12-15 个有效节点。这是一个人短时记忆能勉强覆盖的上限。超过这个量就强制拆分出子图。子图上要留一个返回入口的标号父图上对应节点要标注“详见 XX 图”形成清晰的跳转关系。5.2 颜色当装饰不如不用给节点上色这件事很多人的思路是“觉得好看就填”结果会非常危险。看图的人天然会认为颜色承载语义比如红色代表异常或危险、绿色代表正常、蓝色代表中立。如果你只把颜色当作审美工具那么读者会自动脑补出错误的信息——最典型的场景是你把某一块业务节点涂成浅红色只是想让它显眼结果评审时有人问“这里是不是高危故障点”。我建议颜色要么不用要做就形成稳定的语义通道。比如全图统一主链路节点用蓝绿色系附加说明用灰色系异常或风险节点用橙色系存储类节点用深色系。每一套颜色语义写进图例并且同一项目的多张图之间保持一致。颜色一旦绑定语义就不许为了好看随意更换。5.3 手绘感和像素感分不清阶段工具选择的混乱同样能毁掉一张好图。早期我在需求讨论阶段就打开精确制图工具花半小时去对齐网格和调整线宽结果业务逻辑一变整个排版全部重来。后来我学会了分阶段使用不同工具。需求还不稳定的时候用白板或手写板画潦草的手绘草图重点是快速地改、快速验证关系等到方案基本敲定、需要进文档时再进入精确工具去排布。最忌讳把画草图阶段的思考方式和最终交付阶段的精度要求混在一起。草图的目的是激发思路是会丢弃的交付图的目的才是传达信息需要可读、可改、可复用。你在哪个阶段就用哪个阶段该用的工具不要拿草图的标准去交付也别拿交付的标准去探索。6. 让图库像代码一样被维护版本、模板与评审6.1 源文件、导出图、说明文字一个都不能少工程图的长期价值建立在它是可修改的而不只是可看的。我见过太多团队在文档里只贴了一张导出的 PNG三个月后需求变化原始工程文件找不到只能对着图片重新画一遍。这就是“图债”。我的做法是每张图都有三个配套文件可编辑源文件、导出的图片、三句话左右的说明文字。说明文字记录这张图的版本信息、变更时间和核心表达意图。这些文件放在与项目代码一起的文档目录里随着迭代一起提交。这样别人看到这张图时他知道这是哪个版本的产物也能快速找到源文件去修改。6.2 组件化复用图例、模板、符号库设计风格的一致性能大幅降低读者的理解成本。所以我强烈建议在团队内部维护一个“图形资产包”统一的图例说明、统一的节点样式、统一的线型含义、统一的分层模板。这个资产包不需要很复杂甚至可以只是几张空模板图。但它的价值在于任何一个人新建一张架构图都可以基于模板开始而不是从零发明一套视觉语言。时间长了团队里所有图看起来都像出自同一人之手读者看到一个圆角矩形就知道是服务看到一条红色虚线就知道是异常链路毫无认知摩擦。6.3 图也要被 review别只 review 代码最后一件事也是最容易被忽略的图形同样需要评审。最好的方式是把图作为代码评审的一部分提交评审者在看 PR 的同时看关联图。我一般要求 review 图的时候带着四个固定问题第一主流程能否在不借助口头解释的情况下看明白第二异常分支是否缺失节点是否过多第三颜色与线型语义是否与团队约定一致第四这条链路如果由新人来接他是否知道怎么改这四个问题问完图的问题基本也就暴露干净了。把图当作代码一样来对待它才会真正成为项目的可靠资产而不只是某个人脑子里的经验快照。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑