10.5 代码生成引擎
概述
生成引擎按模板渲染全部产物:后端八件套(统一 gofmt)+ 前端五件/三件,然后经 writeFile 四态落盘决策,最后执行幂等副作用。本节给出产物清单与落盘决策。
产物清单(renderTable)
后端八件套(Go 产物统一 gofmt,format.Source 失败即报错)
| 产物 | 模板 |
|---|---|
| api/v1/{module}.go | templates/api.tpl |
| internal/controller/{module}.go | templates/controller.tpl |
| internal/logic/{module}.go | templates/logic.tpl |
| internal/service/{module}.go | templates/service.tpl |
| internal/dao/{module}.go | templates/dao_index.tpl(挂钩子+Ctx) |
| internal/dao/internal/{module}.go | templates/dao_internal.tpl |
| internal/model/entity/{module}.go | templates/entity.tpl |
| internal/model/do/{module}.go | templates/do.tpl |
前端文件(模板定界符 [[ ]],规避 Vue 插值冲突)
text
ui 普通模板:
src/api/{域}/{moduleCamel}.ts
src/views/{域}/{moduleCamel}/
index.vue edit.vue detail.vue columns.ts querySchemas.ts
ui2 树形模板:
src/api/{域}/{moduleCamel}.ts
src/views/{域}/{moduleCamel}/
index.vue edit.vue detail.vue落盘决策(writeFile 四态)
text
目标文件存在?
/ \
否 是
│ │
写入 generator.overwrite?
Generated / \
true false/缺省
│ │
覆盖写 跳过保留
Overwritten Skipped
\ /
任一失败 → Failed(MkdirAll/WriteFile 错误)覆盖开关唯一入口:generator.overwrite(config.yaml)——true=生成即覆盖,false/未配置=缺失补生成、存在跳过。
skipTables 保护
text
skipTables:仅关联表 role_menu、user_role
跳过文件写入(这两个表无独立模块,关联逻辑归 role/user logic)
但幂等副作用(菜单/字典/路由)照常执行——buildVars 结果供副作用使用生成产物质量保障
text
* Go 产物统一 gofmt(format.Source 失败即报错不落盘——坏格式不入库)
* 生成的 logic 是 ModuleSpec 基座风格完整实现(含筛选/树形/字典/导入导出声明)
* dao 四件与 gf gen dao 同构(挂全局钩子 + Ctx 覆写)
* service 接口含中文方法注释(与手维护风格一致)
* 前端 api 函数含 JSDoc 注释结果报告结构
text
Generate(一键):
Generated[] / Skipped[] / Overwritten[] / Failed[]
Menu{Success, MenuId, Message}
Dict[]{Dict, Name, Items, Status}
Route{Success, Message}
BatchGenerate:
List[]{Table, Success, Generated, Skipped, Overwritten, Failed,
Message, Menu, Dict, Route}
Message="生成 N,跳过 N,覆盖 N,失败 N"
Preview:
List[]{Path, Content}(渲染结果全文,不落盘)生成后 Checklist
text
□ go build ./... 编译通过
□ 重启服务(路由/服务注册生效)
□ 角色管理勾选新权限节点
□ 租户级新表 → hooks.tenantTables 登记(再重启)
□ 访问新菜单:增删改查/导入导出冒烟
□ querySchemas options 改字典驱动(生成的是静态示例选项)
□ 复杂列/复杂筛选手工扩展
□ /api.json 核对接口清单