图即代码:用Mermaid打造可维护可评审的技术设计图

图即代码Mermaid架构图
于 2026-08-28 03:59:03 修改
·本内容遵循CC 4.0 BY-SA版权协议

最近在 GitHub 上注意到一个仓库,名字叫 cathrynlavery/diagram-design。仓库本身可能只是个人作品集或兴趣项目的起点,但 diagram-design 这个组合词很值得停下来想一想:我们天天用 diagram 表达系统架构、业务流程、接口时序、数据模型,但有多少人真的把画图当成一个“设计问题”来对待?

大部分开发者的画图方式是这样的:接到一个任务,打开 draw.io 或者 ProcessOn,把知道的组件拖进去,连线,加几个箭头,半小时后导出一张图,贴到文档里。图看起来能看懂,但三个月后需要更新时,没人愿意去碰它——因为根本不知道怎么改,也不知道哪条线对应哪段代码。如果你也遇到过这种情况,这篇文章就是写给你的。

我的核心判断是:diagram 设计不是“画图技巧”,而是“信息结构设计”。它起码可以拆成三层来理解——语义层、结构层、视觉层,而大多数画图的人只关注了最后那一层。这篇文章会从概念讲起,对比主流工具,重点给出“图即代码”的完整工作流,再讲设计原则、协作规范、常见问题和工程建议。读完以后,你至少能把自己团队里那些“画完就废”的图,变成和代码一样能 Review、能迭代、能自动化的产物。

1. 为什么 diagram 需要被“设计”,而不是只靠“画”

先看几个真实场景。

场景一:技术方案评审。画图的人拿着自己刚画的架构图讲方案,讲了十分钟,评审的人还是没搞清楚服务之间的调用关系。不是他不认真听,而是图的信息层级太乱——网关、数据库、缓存全堆在一起,箭头上还没有标签。

场景二:项目交接。老员工离职,留下十几个 .drawio 文件。新同事打开之后发现,图里的服务名和代码里的模块对不上,有三张图内容差不多但细节冲突,最后只能重新画。

场景三:图与代码脱节。系统已经做了权限拆分,但文档里的架构图还停留在单体阶段。没人记得更新它,因为更新一次要花一两个小时,收益却不明显。

这几个场景的共同点不是“工具不好用”,而是 diagram 缺少设计过程。代码有编译期检查、有单元测试、有 Code Review,图没有。一张图一旦被画出来,就默认是“正确的”“大家都能看懂的”,这个假设在复杂项目里几乎不成立。

所以 diagram 设计到底在解决什么问题?我在工程里总结为四个维度:

  • 受众问题:这张图是给谁看的?给新同学看系统全貌,给评审专家看依赖边界,给运维看部署链路,信息重点完全不同。
  • 信息层级问题:什么信息需要一眼看到,什么信息是次要的,什么信息可以省略。很多图的问题不是画得太少,而是画得太多。
  • 可维护性问题:图能不能在十分钟内被更新?如果一次修改需要移动二十个节点,人一定会偷懒,图一定会过时。
  • 一致性成本问题:团队里 10 个人画 10 张图,风格各不相同,读图的人每次都要重新学习图例。设计规范的价值就是把认知成本收拢一次。

换句话说,diagram 设计的关键不是用什么工具,而是把图当作一种工程产物来管理。能做到这一点的最直接路径,就是“图即代码”。

2. 一张好图的底层模型:语义层、结构层、视觉层

如果不想让 diagram 变成一堆节点的随机组合,可以先建立三层思维模型。

2.1 语义层:图要传达什么事实

语义层是一张图的核心内容。比如“订单服务调用支付服务,先校验库存再扣款”,这是事实。

判断语义层好坏的标准很简单:把图里面的所有颜色、线条、装饰都去掉,只留下文字和连接关系,一个不了解项目的人能否准确说出系统在做什么。很多图的问题就是语义层混乱——一会儿画调用关系,一会儿画部署关系,一会儿又画数据流向,三种关系混在同一组节点之间,读者根本无法判断箭头到底是什么意思。

2.2 结构层:信息如何组织

结构层解决的是布局问题:哪些节点要靠近,哪些节点要分组,主方向是从上到下还是从左到右,边界在哪里。

架构图最典型的组织方式是“按系统边界分组”。订单服务、支付服务、用户服务放在同一个大框里,因为它们属于同一个业务域;数据库、缓存、消息队列放另一组,因为它们属于基础设施。用结构上的分组来表达边界,读者不用看注释也能感受到系统划分。

2.3 视觉层:颜色、形状、线条如何强化语义

视觉层是大多数人最花时间的地方,但它应该排在最后。视觉层的价值不是“让图好看”,而是“让语义更快被理解”。

一个常用的做法是建立图例:

  • 颜色语义化:蓝色表示业务服务,绿色表示外部依赖,橙色表示中间件,红色表示告警路径。
  • 形状语义化:矩形表示服务,圆柱表示数据库,棱形表示判断,圆角矩形表示人。
  • 线条语义化:实线表示同步调用,虚线表示异步消息,粗线表示核心链路。

用一个类比来理解这三层:语义层是写文章的思路,结构层是文章大纲,视觉层是排版设计。一个高频误区是打开工具先选主题色,完全跳过语义和结构的思考。正确顺序应该是:先在脑子里或草稿纸上回答“这张图要证明什么”,再决定怎么分组、怎么排版,最后才用颜色和形状去强化重点。

3. 工具选型:图即代码,还是可视化编辑?

工具选择的本质是“维护性”与“上手成本”的权衡。下面这张表是当前比较主流的选择,注意 Mermaid 和 PlantUML 这类工具会随着版本迭代演进,具体语法以官方文档为准。

工具 类型 代码驱动 适用场景 上手成本 维护性
Mermaid 图即代码 架构图、时序图、状态图、甘特图、文档内嵌
PlantUML 图即代码 UML 类图、用例图、时序图、活
最低 0.47元/天 开通会员,解锁全文
left
成为会员后, 你将解锁
right
benefits 下载资源随意下
benefits 优质VIP博文免费学
benefits 优质文库回答免费看
benefits 付费资源9折优惠
Mermaid语法UML类[项目代码]
它不仅提高了代码的可读性和可维护性,还为软件设计的沟通提供了便捷的工具。因此,学习如何在Obsidian中利用Mermaid绘制UML类,对于软件开发人员来说,是一项非常有价值的技能。
递归诗人
7
mermaid语法类
本文介绍了Mermaid语言中类的绘制方法,包括类的基本结构、单个类的定义及其属性方法,以及类间关系的表达方式。通过具体的代码示例,展示了继承、实现、关联、聚合和合成等UML类图关系的绘制。
风止于秋水~
Markdown mermaid ER指南[项目代码]
本文提供了实用的代码示例,包括如何用mermaid语法在Markdown文件中创建ER。这些示例将帮助读者具体实践所学知识,通过实际操作加深对mermaid绘图工具的掌握。
「已注销」
3
sphinxcontrib-mermaid:Sphinx技术文档中的美人鱼
资源摘要信息:"sphinxcontrib-mermaid是Sphinx文档生成工具的一个扩展,它能够让你在Sphinx技术文档中嵌入美人鱼标记(Mermaid)的图表。Mermaid是一种基于JavaScript的图表绘制库,可以用来生成流程图、序列图、甘特图等UML(统一建模语言)。通过此扩展,技术人员可以很方便地在Sphinx生成的文档中插入生动的图表,增强文档的可读性和信息的表达效果。该扩展通过添加一个新的指令,即‘mermaid::’,允许用户直接在文档的reStructuredText源文件中编写Mermaid图表的标记代码。例如,文档中可以这样嵌入一个简单的序列图:.. mermaid:: sequenceDiagram participant Alice participant Bob Alice->John: Hello John, how are you? loop Healthcheck John->John: Fight against hypochondria end Note right of John: Rational thoughts prevail... John-->Alice: Great! John->Bob: How about you? Bob-->John: Jo这种语法的使用方式类似于嵌入代码块。当文档被构建时,sphinxcontrib-mermaid扩展会处理这些标记,并使用Mermaid的JavaScript库将标记转换为图形,最终生成相应的图像文件并嵌入到HTML页面中。这样的流程使得生成复杂的图形变得非常简单和高效。除了序列图之外,使用sphinxcontrib-mermaid扩展还可以生成其他类型的Mermaid图表,包括流程图(flowchart)、甘特图(gantt)、类(class diagram)、状态图(state diagram)、实体关系(ER diagram)等。每一种图表类型都有一套自己的标记语言,通过这种方式,用户可以灵活地创建各种复杂的图表。sphinxcontrib-mermaid扩展的标签信息提示了它主要面向的用户群体和功能定位。标签包括- uml diagrams: 表明扩展可以生成统一建模语言(UML)图表。- sphinx-doc: 显示这是针对Sphinx文档系统的扩展。- sphinxcontrib: 表示这是一个Sphinx的contrib(贡献)扩展,即社区提供的额外功能。- Python: 说明该扩展是用Python编写的。从压缩包子文件的文件名称列表“sphinxcontrib-mermaid-master”可以看出,此扩展是sphinxcontrib-mermaid项目的一个版本,通常包含完整的源代码和文档。开发者和用户可以下载这个包来安装和使用该扩展,或者参与项目的维护和开发。总的来说,sphinxcontrib-mermaid扩展极大地提高了Sphinx技术文档的可视化表达能力,使得技术人员在撰写和维护文档时能够更加直观地展示系统架构、工作流程和其他关键信息。"
小子骚骚
Mermaid与样式[代码]
Mermaid的源码和代码包通常可以在一些开源代码托管平台找到,这些平台为开发者提供了一个共享和协作的环境。
Mermaid画ER
本文介绍了如何使用Mermaid工具绘制实体关系(ER)。首先介绍了基本语法结构,然后详细讲解了实体定义、属性作用、关系定义以及高级功能。通过具体的代码示例,展示了如何定义实体及其属性、描述实体间的一对一、一对多和多对多关系,并调整图表布局方向。
尤莉有力
mermaid 方向怎么控制
本文介绍了如何在Mermaid中控制子的方向。通过设置全局图表方向,可以间接影响子的布局。虽然不能单独为子定义方向,但可以通过节点连接关系模拟特定效果。文中提供了定义全局方向和子内局部调整的示例代码
weixin_44590965
mermaid生成ER
本文介绍了使用Mermaid工具绘制实体关系(ER)的基本方法。首先定义了ER的作用,然后详细解释了其基本语法,包括如何描述实体及其属性,以及如何表达实体间的一对一、一对多或多对多关系。通过具体的代码示例,展示了如何创建包含汽车和个人实体的ER
乜嘢噢耶
Mermaid画计划
本文介绍了如何使用Mermaid工具绘制计划Mermaid是一种轻量级的图表生成工具,支持多种图形绘制,包括流程图、序列图和甘特图等。文章详细说明了如何通过Mermaid的Gantt功能创建项目时间安排和进度展示的计划,并提供了具体的代码示例和参数说明。
jmpv0001
需要方案设计图
本文介绍了如何绘制方案设计图,包括技术方案架构图、技术路线图、系统实现流程图、软硬件协同设计图和对比方案选择等五种类型,并提供了相应的mermaid代码示例。同时,给出了设计规范建议,包括信息密度控制、专业标注示例和颜色编码规范,以确保图表的专业性和清晰度。
2301_82053703
用文本即代码打造高效图表设计流程:Mermaid实战指南
本文系统阐述基于Mermaid的文本即代码图表设计方法论,涵盖型选型依据、Mermaid核心优势对比、视觉与命名规范、五类高频(架构图、流程图、时序图、类/ER、状态图/甘特图)绘制要点、质量检查清单(十秒原则、报错排查、团队review机制),以及VS Code开发环境搭建和主题配置等工程化实践,聚焦提升技术文档图表的可维护性、可读性与协作效率。
知擎
259
告别繁琐绘图Mermaid代码轻松创建专业图表
Mermaid是一款基于JavaScript的文本生成图表工具,支持流程图、甘特图、用户旅程、架构图、实体关系等20余种图表类型。其核心优势包括代码即文档、实时预览和无缝集成,适用于技术文档编写、项目管理、系统架构设计与团队协作。支持主题定制、多格式导出(SVG/PNG)及无障碍访问,可集成于Markdown、VS Code、Obsidian及CI/CD流程。
薛曦旖Francesca
301
文本化Diagram-Design:打造可维护的架构与流程图
本文系统阐述文本化Diagram-Design的核心方法,强调将的信息结构设计前置,区分型(流程/层级/通信)并匹配Mermaid、D2等文本化工具;提出主方向一致、节点数≤7±2、三色语义配色等布局与视觉原则;详解从需求拆解、节点关系建模到Git协同评审的完整实操链路;指出多人协作中工具统一、diff噪音控制、命名规范等关键治理点;并延伸至体系分层、元信息标注、自动化生成及生命周期管理。全文聚焦可维护、可协作、可工程化的架构实践。
尹昉
337
从画图到设计:打造可维护的系统架构图工作流
本文提出一套面向可维护性的系统架构图设计方法论,强调从手工绘图转向代码驱动的设计流程。核心包括以约束性、可读性、可维护性为设计三原则;采用Mermaid、PlantUML、Python Diagrams等文本化工具实现版本可控与CI集成;建立形状、颜色、图标、命名四维设计规范;通过分层布局、卡片化表达、语义化连线提升图表可信度;并支持自动化渲染、语义校验与团队协作评审。适用于架构师与后端开发者构建活文档式技术资产。
武子奇
304
技术对齐高性能开发者如何构建高效协作框架
本文系统阐述高性能开发者间实现高效协作的核心方法——技术对齐,涵盖工程价值观对齐、开发环境标准化、代码质量工具强制统一、设计共识流程、并行开发同步机制、建设性代码评审、数据驱动的冲突解决框架及心理安全构建。强调将主观默契转化为可落地的流程、规范与工具链,提升团队整体产出效率与代码可维护性。
weixin_33863087
390
AI驱动绘图从自然语言到专业架构图的自动化工作流实践
本文介绍如何利用大语言模型(如GPT-4、Claude 3)结合draw.io实现微服务架构图的自动化生成。核心路径是通过精准提示词将自然语言描述转化为Mermaid代码,再由draw.io原生解析并渲染为可编辑XML图表。重点涵盖提示词工程、Mermaid到draw.io的格式转换、自动布局与美化技巧,并支持与Markdown文档链集成及版本化管理,显著提升技术图表产出效率与可维护性。
福桃九分饱
335
CLAUDE.md配置全解析从项目规范到AI协作,打造高效智能编程助手
本文系统解析CLAUDE.md作为Claude Code项目级上下文配置文件的核心作用,涵盖其设计哲学(上下文感知编程)、与.cursorrules和agents.md的定位区分、三段式结构编写技巧(项目全景、目录职责、编码规范)、动态上下文集成(OpenAPI引用、微服务分层、.claudeignore优化),以及在全栈项目中的实战迭代与常见问题排查。重点强调其在统一AI协作规范、提升代码一致性与架构对齐方面的关键技术价值。
weixin_30512089
379