94 lines
3.7 KiB
Markdown
94 lines
3.7 KiB
Markdown
# 10.1 概述与架构
|
||
|
||
:::tip 概述
|
||
代码生成器根据表结构一键产出前后端全套文件,并同步创建菜单、权限节点、字典数据、路由注册行(全部幂等)。双入口:HTTP(管理页面)与 CLI(cmd/generator)。核心在 internal/logic/generator.go + generator_side.go。
|
||
:::
|
||
|
||
## 定位
|
||
|
||
```text
|
||
输入:表名列表("表名|注释")
|
||
产出:
|
||
后端八件套(api/controller/logic/service + dao index/internal + entity + do)
|
||
前端文件(api/{域}/{模块}.ts + views/{域}/{模块}/ 五件或三件)
|
||
幂等副作用:菜单 + 权限节点 + 字典 + router.go 注册行
|
||
约束:生成的 logic 是 ModuleSpec 基座风格的完整可用实现,
|
||
go build 后即可运行;复杂业务再手工扩展钩子
|
||
```
|
||
|
||
## 双入口
|
||
|
||
```text
|
||
HTTP(/api/generator,管理页面"代码生成"):
|
||
GET /api/generator/page sys:generator:page 数据表清单(分页)
|
||
POST /api/generator/preview sys:generator:generator 预览(不落盘)
|
||
POST /api/generator/generate sys:generator:generator 一键生成
|
||
POST /api/generator/batchGenerate sys:generator:batchGenerator 批量生成
|
||
日志 logType=generate(19 代码生成)
|
||
|
||
CLI(仓库根目录,读同一份 config.yaml):
|
||
go run ./cmd/generator -tables "goframe_example|案例演示表"
|
||
CLI 空白 import internal/logic 注册全部服务,直接调用 service.Generator()
|
||
```
|
||
|
||
## 总体流水线
|
||
|
||
```text
|
||
输入 tables[]("表名|注释")
|
||
│
|
||
▼
|
||
buildVars:TableFields 内省 → 类型/注释解析 → 字段分桶(列表/表单/筛选)
|
||
│ 命名:module/Pascal/camelLower;域归属;ui|ui2 模板类型
|
||
▼
|
||
skipTables? ──是(role_menu/user_role)──▶ 仅 buildVars(副作用用),跳过文件
|
||
│ 否
|
||
▼
|
||
renderTable:逐模板渲染(后端 {{ }} / 前端 [[ ]])→ go 产物 gofmt
|
||
│
|
||
▼
|
||
writeFile×N(四态:新写/跳过/覆盖/失败)
|
||
│
|
||
▼
|
||
副作用(幂等):createMenu(+权限节点) → createDict(枚举字段) → registerRouter
|
||
│
|
||
▼
|
||
结果报告(Generated/Skipped/Overwritten/Failed + Menu/Dict/Route)
|
||
│
|
||
▼
|
||
提示:go build ./... 并重启服务
|
||
```
|
||
|
||
## 域归属与模板类型
|
||
|
||
```text
|
||
genDomainMap 域归属(决定前端 api/views 目录):
|
||
user/role/menu/dept/level/position/tenant → system
|
||
config/param/dict/notice/city → data
|
||
article/category/link → content
|
||
operation_log/login_log/job/… → monitor
|
||
example/file_template/… → tool(默认)
|
||
|
||
模板类型:有 parent_id/pid 列 → ui2(树形模板),否则 ui(普通列表模板)
|
||
排序默认:有 sort 列 → "sort asc",否则 "id desc"
|
||
```
|
||
|
||
## 与 gf gen dao 的分工
|
||
|
||
| 工具 | 用途 |
|
||
|------|------|
|
||
| `gf gen dao -c hack/config.yaml` | **表结构变更**后刷新已有模块 dao(自定义模板挂钩子+Ctx;overwriteDao:false 保留手工扩展) |
|
||
| 生成器 | **新模块**一键产出(dao 四件与 gf gen dao 同构,生成后统一 gofmt 可直接编译) |
|
||
| `gf gen service` | **禁止整体运行**(service 接口为手工重组维护) |
|
||
|
||
## 保护策略速览
|
||
|
||
```text
|
||
skipTables:仅关联表 role_menu/user_role 整表跳过文件生成
|
||
(副作用照常执行)
|
||
文件粒度四态:缺失补生成(Generated)/ 已存在跳过(Skipped)
|
||
/ 开覆盖时覆盖(Overwritten)/ 失败(Failed)
|
||
覆盖开关唯一入口:generator.overwrite(config.yaml)
|
||
```
|
||
|
||
详见 [10.5 代码生成引擎](./code-engine) 与 [10.7 配置文件详解](./config)。
|