Skip to content

10.5 代码生成引擎 ​

概述

生成引擎按模板渲染全部产物:后端八件套(统一 gofmt)+ 前端五件/三件,然后经 writeFile 四态落盘决策,最后执行幂等副作用。本节给出产物清单与落盘决策。

产物清单(renderTable) ​

后端八件套(Go 产物统一 gofmt,format.Source 失败即报错) ​

产物模板
api/v1/{module}.gotemplates/api.tpl
internal/controller/{module}.gotemplates/controller.tpl
internal/logic/{module}.gotemplates/logic.tpl
internal/service/{module}.gotemplates/service.tpl
internal/dao/{module}.gotemplates/dao_index.tpl(挂钩子+Ctx)
internal/dao/internal/{module}.gotemplates/dao_internal.tpl
internal/model/entity/{module}.gotemplates/entity.tpl
internal/model/do/{module}.gotemplates/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 核对接口清单

小蚂蚁云团队 · 提供技术支持