ADR-0030:DDL 模板引擎(Freemarker 终态 + doT 遗留桥)
- 状态:已实现(2026-08-09,Freemarker 终态切片完成)
- 前置:ADR-0022 工作区↔版本↔实库;
docs/data-format.md projectJSON database[] 模板字段
- projectJSON 内 DDL 模板沿用 doT.js 语法(
defaultData.json);历史前端 json2code.ts 曾用 于预览/导出。
- 版本面板
/hisProject/diff 的 ddl 必须由后端权威生成;前端只渲染 API(ADR-0022 延伸)。
- 约束:JVM 原生高性能 / 低内存;禁止 Nashorn/GraalJS/ScriptEngine 嵌入 doT.js;不长期维持双引擎。
- 调研结论:Handlebars 双端同文在 FE 不再执行 DDL 后失去同构收益,JVM 吞吐约为 Freemarker 的 ~1/5,故不作为终态。
决策(终态)
1. 单一权威:后端生成 DDL
- 版本详情 / 对比、导出、同步 SQL 等 product path 的 DDL 一律由后端生成。
- 前端 禁止 在产品路径调用
generateUpdateSql / json2code 重算 DDL;只渲染 API 返回的 ddl 字符串。
- FE 版本面板、顶栏 dirty、导出与实库同步 SQL 随切片迁移至后端 API;doT 前端运行时逐步退役(非 product path 调试工具可暂留)。
2. 引擎:Freemarker(终态);Pebble(过渡)