ice-entity-designer-dsl · 领域建模 JSON DSL(当前 v0.0.29)
一份 JSON 文档同时驱动渲染、校验与导出三种能力;七种 kind(ER / flowchart / BPMN / UML / statechart / gantt / power)共用同一套图层自动布局(layeredLayout),并通过 toDsl() 实现往返写回——用户改过的画布能原样导出成同一份 DSL,再渲染回去。
这是 ice-entity-designer 之上的一层 JSON-first DSL:AI Agent 不需要学习命令式的画布 API(new EntityDesigner(...)、createEntity、createRelation……),只要产出结构化 JSON,同一份文档既能直出设计器实例,也能在服务端做校验与序列化。它和 ice-render 通用 DSL(ice-render-dsl)是同一套「数据 → 引擎」哲学,但词汇表不互通——领域建模用本包,通用图形用 ice-render-dsl。
MIT License · 作者:大漠穷秋(damoqiongqiu@126.com)
1. 它是什么
ice-entity-designer-dsl 以一份 JSON 文档覆盖 7 种图 kind。整张文档是「节点 + 连线」(ER 文档用 entities / relations 的同源写法)的平坦描述,坐标大多可省略——缺省时由共享的分层自动布局推出来:
- ER(
entities/relations): 实体-关系模型与数据库 Schema。 - flowchart:流程图、决策树、算法,可选坐标(分层自动布局)。
- BPMN:业务流,含池 / 泳道(真容器)、事件 / 网关 / 任务角标 / 数据对象 / 注释,可导出 BPMN 2.0 XML。
- UML:类图(类 / 接口 / 枚举 + 自由文本成员),含六种关系,可互操作 PlantUML / Mermaid。
- statechart:状态机(伪状态 / 状态 / 复合状态容器 + 转移标签
事件[守卫]/动作)。 - gantt:排期(任务含
start/days/progress,连线是完成→开始依赖),完全无坐标,横轴时间、纵轴声明顺序。 - power:电力一次系统图(设备符号与
ice-entity-designer的电力包对齐,attachedTo表达母线 T 接、voltageLevel驱动色标)。
2. 安装与 UMD 加载顺序
# DSL 运行时会顺带安装 ice-entity-designer(它经由设计器渲染)
npm install ice-entity-designer-dsl ice-entity-designer ice-render
引擎(ice-render)是两者的 peer 依赖,在 UMD 产物里保持外部引用(globals: { 'ice-render': 'ICE' } / { 'ice-entity-designer': 'IED' })。所以一个纯 <script> 页面必须按下面顺序加载三个 UMD:
<canvas id="canvas" width="1200" height="800"></canvas>
<script src="node_modules/ice-render/dist/index.umd.js"></script>
<script src="node_modules/react/umd/react.production.min.js"></script>
<script src="node_modules/react-dom/umd/react-dom.production.min.js"></script>
<script src="node_modules/dayjs/dayjs.min.js"></script>
<script src="node_modules/antd/dist/antd.min.js"></script>
<script src="node_modules/ice-entity-designer/dist/index.umd.js"></script>
<script src="node_modules/ice-entity-designer-dsl/dist/index.umd.js"></script>
<script>
const dsl = {
schemaVersion: 1,
layout: 'layered',
entities: [
{ id: 'customer', name: 'Customer', fields: [{ name: 'id', type: 'number', primary: true }] },
{ id: 'order', name: 'Order', fields: [{ name: 'id', type: 'number', primary: true }] },
],
relations: [{ source: 'customer', target: 'order', type: 'one-to-many' }],
};
const { ice, designer } = ICEDSL.renderDsl('canvas', dsl); // 全局命名空间 ICEDSL
</script>
加载顺序铁律:ice-render → react / react-dom / dayjs / antd → ice-entity-designer → ice-entity-designer-dsl。设计器依赖 React 生态与引擎全局
ICE,DSL 又依赖设计器全局IED;顺序错则运行时报依赖缺失。
Node / ESM 工程里直接 import 即可,无需关心 UMD 顺序:
import {
validateDsl, compileDsl, compileFlowDsl, renderDsl,
} from 'ice-entity-designer-dsl';
3. 七种 kind 速览
kind | 用途 | 典型场景 |
|---|---|---|
| (缺省,ER) | 实体-关系模型 | 数据库 Schema 设计、ORM 落地 |
flowchart | 流程 / 判定 | 算法步骤、审批流、决策树 |
bpmn | 业务流程建模 |