nomnoml 工具说明
nomnoml 可将纯文本描述转换为 nomnoml 标记,并(可选)通过 CLI 渲染。
主要参考地址:https://nomnoml.com
快速开始
最简图表
[User]->[AuthService] [AuthService]->[DB]
典型类框
[Order| +id: UUID; +total: Money; | +addItem(item); +checkout(); ]
语法要点
节点(框)
基本形式:[A]
带分隔区(标题 | 属性 | 方法):[A|x; y|do();]
换行可用实际换行(推荐)或必要时使用 \n。
关系(常用)
[A]->[B] # 关联 / 依赖 [A]-->[B] # 点线 [A]-:>[B] # 类组合(样式可能不同) [A]<-[B] # 反向箭头 [A]-[B] # 无箭头连线
若箭头语义不明确,优先使用清晰标签:
[API]->[DB] [API] "reads/writes" -> [DB]
基数 / 标签
[Customer] 1->* [Order] [Order] 1->* [OrderLine]
分组
[<frame> Payments| [API] [Worker] ]
[API]->[Worker]
常见容器:
<frame>:大框分组
<package>:类包分组
<actor>:角色火柴人
样式 / 指令
在顶部使用 # 添加指令:
#direction: right #spacing: 40 #ranker: tight-tree
[Client]->[API]
常见指令:
#direction: right|down
#spacing: <数字>
#padding: <数字>
#ranker: network-simplex|tight-tree|longest-path
工作流程:根据描述生成图表
识别图表类型:
类/数据模型 → 带分隔区的框 + 继承/关联
架构/服务 → frame/package + 箭头 + 带标签的边
流程/步骤 → 简单框 + 箭头,保持可读性
选择名称:
对节点使用稳定名词(AuthService、TokenStore、Frontend)。
保持节点名称简短;详情放在分隔区或标签中。
生成 nomnoml 代码:
架构图以 #direction: right 开头。
使用 frame/package 按限界上下文分组。
为非显而易见的内容添加标签。
迭代:
若图表过密,按子系统拆分为多个图表。
渲染(工具)
若需要渲染资源,使用 nomnoml 工具而非 CLI。
选项 A:快速预览
使用工具直接在聊天中渲染:
使用 nomnoml-display 内联源码进行快速预览。
选项 B:渲染为 SVG
使用工具渲染并可选写入文件:
使用 nomnoml-render 内联源码及可选 outputFile。
使用 nomnoml-render-file 输入 inputFile 及可选 outputFile。
若不需要渲染,仍生成 .nomnoml 源文件以便后续渲染。
模式
架构草图(推荐的默认模式)
#direction: right
[<actor> User]->[WebApp]
[<frame> Backend| [API] [Worker] ]
[WebApp]->[API] [Worker]->[DB] [API]->[DB]
[DB]
带继承的类图
[<abstract> Animal|+name: string|+speak()] [Dog|+breed: string|+speak()] [Cat|+color: string|+speak()]
[Animal]<:-[Dog] [Animal]<:-[Cat]
实体关系(简单)
#direction: down
[User|id; email] [Session|id; userId; expiresAt]
[User] 1->* [Session]
当要求“更新现有图表”时
除非有明确重命名,保留现有节点名称。
应用最小差异:
一次添加一个框/边
保持 direction/ranker 一致
若改变含义,更新边标签以保持明确。