Files
tyapi-server/docs/DDD代码生成器策划方案.md

653 lines
15 KiB
Markdown
Raw Permalink Normal View History

2025-07-15 13:21:34 +08:00
# DDD代码生成器策划方案
## 概述
DDD代码生成器是一个命令行工具用于快速生成符合DDD架构模式的领域代码。支持生成完整的领域结构包括实体、仓储、应用服务、DTO、HTTP处理器等大幅提升开发效率。
## 功能特性
### 1. 核心功能
#### 1.1 领域生成
- **完整领域生成**: 一次性生成整个领域的所有代码文件
- **实体生成**: 生成实体、枚举、业务方法
- **仓储生成**: 生成仓储接口和GORM实现
- **应用服务生成**: 生成应用服务接口和实现
- **DTO生成**: 生成命令、查询、响应DTO
- **HTTP层生成**: 生成处理器和路由
- **依赖注入配置**: 自动更新容器配置
#### 1.2 增量功能
- **新增实体**: 在现有领域中添加新实体
- **新增服务**: 为现有实体添加新的应用服务
- **新增API**: 为现有实体添加新的HTTP接口
- **字段扩展**: 为现有实体添加新字段
#### 1.3 模板功能
- **自定义模板**: 支持自定义代码模板
- **模板变量**: 支持丰富的模板变量替换
- **多语言支持**: 支持中文和英文模板
### 2. 高级功能
#### 2.1 智能分析
- **依赖分析**: 自动分析实体间关系
- **命名规范**: 自动生成符合规范的命名
- **类型推断**: 根据字段名自动推断数据类型
- **验证规则**: 自动生成字段验证规则
#### 2.2 代码质量
- **Linter集成**: 生成后自动运行代码检查
- **格式化**: 自动格式化生成的代码
- **测试生成**: 自动生成单元测试和集成测试
- **文档生成**: 自动生成API文档注释
#### 2.3 项目管理
- **项目扫描**: 扫描现有项目结构
- **配置管理**: 管理生成器配置
- **历史记录**: 记录生成历史
- **回滚功能**: 支持代码回滚
## 技术架构
### 1. 整体架构
```
DDD Generator
├── CLI Interface # 命令行接口
├── Core Engine # 核心引擎
├── Template Engine # 模板引擎
├── Code Analyzer # 代码分析器
├── File Manager # 文件管理器
└── Validator # 验证器
```
### 2. 核心组件
#### 2.1 CLI Interface
- **命令解析**: 解析命令行参数
- **交互式输入**: 提供友好的交互界面
- **帮助系统**: 提供详细的帮助信息
- **配置管理**: 管理用户配置
#### 2.2 Core Engine
- **生成流程控制**: 控制代码生成流程
- **依赖管理**: 管理组件间依赖关系
- **错误处理**: 统一的错误处理机制
- **日志系统**: 详细的日志记录
#### 2.3 Template Engine
- **模板解析**: 解析Go模板语法
- **变量替换**: 执行模板变量替换
- **条件渲染**: 支持条件渲染逻辑
- **循环渲染**: 支持循环渲染逻辑
#### 2.4 Code Analyzer
- **AST解析**: 解析Go代码AST
- **依赖分析**: 分析代码依赖关系
- **结构分析**: 分析项目结构
- **命名分析**: 分析命名规范
#### 2.5 File Manager
- **文件操作**: 安全的文件读写操作
- **目录管理**: 创建和管理目录结构
- **备份恢复**: 文件备份和恢复
- **权限管理**: 文件权限管理
#### 2.6 Validator
- **语法验证**: 验证生成的代码语法
- **规范检查**: 检查代码规范
- **依赖验证**: 验证依赖关系
- **冲突检测**: 检测文件冲突
## 使用场景
### 1. 新项目初始化
```bash
# 生成完整的用户域
ddd-gen domain user --entities user,role,permission --features auth,profile
# 生成产品域
ddd-gen domain product --entities product,category,order --features catalog,order
```
### 2. 现有项目扩展
```bash
# 在用户域中添加新实体
ddd-gen entity user subscription --fields id,name,price,status
# 为产品添加新服务
ddd-gen service product inventory --methods check,update,reserve
# 添加新的API接口
ddd-gen api product search --methods search,filter,sort
```
### 3. 批量操作
```bash
# 批量生成多个域
ddd-gen batch --config domains.yaml
# 批量添加字段
ddd-gen batch-fields --config fields.yaml
```
## 配置文件
### 1. 项目配置 (ddd-config.yaml)
```yaml
project:
name: "tyapi-server"
module: "tyapi-server/internal"
author: "开发团队"
version: "1.0.0"
templates:
path: "./templates"
language: "zh"
style: "standard"
output:
path: "./internal"
backup: true
format: true
test: true
validation:
lint: true
test: true
docs: true
```
### 2. 领域配置 (domain-config.yaml)
```yaml
domain:
name: "user"
description: "用户管理域"
entities:
- name: "user"
fields:
- name: "id"
type: "string"
tag: "gorm:\"primaryKey;type:varchar(36)\""
comment: "用户ID"
- name: "username"
type: "string"
tag: "gorm:\"type:varchar(50);uniqueIndex;not null\""
comment: "用户名"
validation: "required,min=3,max=50"
- name: "email"
type: "string"
tag: "gorm:\"type:varchar(100);uniqueIndex;not null\""
comment: "邮箱"
validation: "required,email"
- name: "password"
type: "string"
tag: "gorm:\"type:varchar(255);not null\""
comment: "密码"
validation: "required,min=6"
- name: "status"
type: "UserStatus"
tag: "gorm:\"type:varchar(20);default:'active'\""
comment: "用户状态"
methods:
- name: "IsActive"
return: "bool"
body: "return u.Status == UserStatusActive"
- name: "CanLogin"
return: "bool"
body: "return u.IsActive() && !u.IsDeleted()"
- name: "role"
fields:
- name: "id"
type: "string"
tag: "gorm:\"primaryKey;type:varchar(36)\""
comment: "角色ID"
- name: "name"
type: "string"
tag: "gorm:\"type:varchar(50);uniqueIndex;not null\""
comment: "角色名称"
validation: "required,min=2,max=50"
- name: "description"
type: "string"
tag: "gorm:\"type:text\""
comment: "角色描述"
enums:
- name: "UserStatus"
values:
- name: "Active"
value: "active"
comment: "激活状态"
- name: "Inactive"
value: "inactive"
comment: "未激活状态"
- name: "Suspended"
value: "suspended"
comment: "暂停状态"
services:
- name: "user"
methods:
- name: "CreateUser"
command: "CreateUserCommand"
response: "UserInfoResponse"
- name: "UpdateUser"
command: "UpdateUserCommand"
response: "UserInfoResponse"
- name: "DeleteUser"
command: "DeleteUserCommand"
- name: "GetUserByID"
query: "GetUserQuery"
response: "UserInfoResponse"
- name: "ListUsers"
query: "ListUsersQuery"
response: "UserListResponse"
- name: "EnableUser"
command: "EnableUserCommand"
- name: "DisableUser"
command: "DisableUserCommand"
apis:
- path: "/users"
methods:
- method: "GET"
handler: "ListUsers"
summary: "获取用户列表"
- method: "POST"
handler: "CreateUser"
summary: "创建用户"
- path: "/users/:id"
methods:
- method: "GET"
handler: "GetUserDetail"
summary: "获取用户详情"
- method: "PUT"
handler: "UpdateUser"
summary: "更新用户"
- method: "DELETE"
handler: "DeleteUser"
summary: "删除用户"
- path: "/users/:id/enable"
methods:
- method: "POST"
handler: "EnableUser"
summary: "启用用户"
- path: "/users/:id/disable"
methods:
- method: "POST"
handler: "DisableUser"
summary: "禁用用户"
```
## 命令行接口
### 1. 主要命令
```bash
# 生成完整领域
ddd-gen domain <domain-name> [options]
# 生成实体
ddd-gen entity <domain-name> <entity-name> [options]
# 生成服务
ddd-gen service <domain-name> <service-name> [options]
# 生成API
ddd-gen api <domain-name> <api-name> [options]
# 生成DTO
ddd-gen dto <domain-name> <dto-type> [options]
# 生成测试
ddd-gen test <domain-name> <test-type> [options]
# 项目初始化
ddd-gen init [options]
# 配置管理
ddd-gen config [subcommand] [options]
# 模板管理
ddd-gen template [subcommand] [options]
```
### 2. 选项参数
```bash
# 通用选项
--config, -c 指定配置文件
--output, -o 指定输出目录
--template, -t 指定模板目录
--force, -f 强制覆盖文件
--dry-run 试运行模式
--verbose, -v 详细输出
--quiet, -q 静默模式
# 领域选项
--entities 指定实体列表
--features 指定功能特性
--services 指定服务列表
--apis 指定API列表
# 实体选项
--fields 指定字段定义
--methods 指定业务方法
--enums 指定枚举定义
--relations 指定关联关系
# 服务选项
--methods 指定服务方法
--commands 指定命令DTO
--queries 指定查询DTO
--responses 指定响应DTO
```
### 3. 交互式模式
```bash
# 交互式生成领域
ddd-gen domain --interactive
# 交互式生成实体
ddd-gen entity --interactive
# 交互式配置
ddd-gen config --interactive
```
## 模板系统
### 1. 模板结构
```
templates/
├── domain/ # 领域模板
│ ├── entities/ # 实体模板
│ ├── repositories/ # 仓储模板
│ ├── services/ # 服务模板
│ └── http/ # HTTP模板
├── dto/ # DTO模板
├── test/ # 测试模板
├── config/ # 配置模板
└── docs/ # 文档模板
```
### 2. 模板变量
```go
// 基础变量
{{.DomainName}} // 领域名称
{{.EntityName}} // 实体名称
{{.ServiceName}} // 服务名称
{{.PackageName}} // 包名称
{{.ModulePath}} // 模块路径
// 实体变量
{{.Fields}} // 字段列表
{{.Methods}} // 方法列表
{{.Enums}} // 枚举列表
{{.Relations}} // 关联关系
// 服务变量
{{.Commands}} // 命令列表
{{.Queries}} // 查询列表
{{.Responses}} // 响应列表
// API变量
{{.Routes}} // 路由列表
{{.Handlers}} // 处理器列表
{{.Middlewares}} // 中间件列表
// 项目变量
{{.ProjectName}} // 项目名称
{{.Author}} // 作者
{{.Version}} // 版本
{{.Timestamp}} // 时间戳
```
### 3. 条件渲染
```go
{{if .HasEnums}}
// 枚举定义
{{range .Enums}}
type {{.Name}} {{.Type}}
const (
{{range .Values}}
{{.Name}}{{.Name}} {{.Type}} = "{{.Value}}"
{{end}}
)
{{end}}
{{end}}
{{if .HasRelations}}
// 关联关系
{{range .Relations}}
{{.FieldName}} {{.Type}} `gorm:"foreignKey:{{.ForeignKey}}"`
{{end}}
{{end}}
```
## 代码分析
### 1. AST分析
```go
// 分析现有代码结构
type CodeAnalyzer struct {
parser *ast.Parser
types *types.Info
}
// 分析实体结构
func (ca *CodeAnalyzer) AnalyzeEntity(filePath string) (*EntityInfo, error) {
// 解析Go文件AST
// 提取结构体信息
// 分析字段和方法
// 识别关联关系
}
// 分析依赖关系
func (ca *CodeAnalyzer) AnalyzeDependencies(packagePath string) (*DependencyInfo, error) {
// 分析包依赖
// 识别循环依赖
// 生成依赖图
}
```
### 2. 命名分析
```go
// 命名规范检查
type NamingAnalyzer struct {
rules []NamingRule
}
// 检查命名规范
func (na *NamingAnalyzer) CheckNaming(name, type string) error {
// 检查命名规范
// 提供建议
// 自动修正
}
```
## 验证系统
### 1. 语法验证
```go
// 验证生成的代码
func ValidateCode(code string) error {
// 解析Go代码
// 检查语法错误
// 验证类型
// 检查导入
}
```
### 2. 规范检查
```go
// 检查代码规范
func CheckCodeStyle(code string) []StyleIssue {
// 检查格式
// 检查命名
// 检查注释
// 检查复杂度
}
```
### 3. 依赖验证
```go
// 验证依赖关系
func ValidateDependencies(domain *Domain) error {
// 检查循环依赖
// 验证接口实现
// 检查导入路径
}
```
## 扩展功能
### 1. 插件系统
```go
// 插件接口
type Plugin interface {
Name() string
Execute(ctx *Context) error
Validate(ctx *Context) error
}
// 内置插件
var BuiltinPlugins = []Plugin{
&LinterPlugin{},
&TestPlugin{},
&DocsPlugin{},
&MigrationPlugin{},
}
```
### 2. 自定义模板
```go
// 模板注册
func RegisterTemplate(name, content string) error {
// 验证模板语法
// 注册模板
// 更新索引
}
```
### 3. 代码转换
```go
// 代码转换器
type CodeTransformer struct {
rules []TransformRule
}
// 转换现有代码
func (ct *CodeTransformer) Transform(code string) (string, error) {
// 应用转换规则
// 保持代码结构
// 更新引用
}
```
## 部署方案
### 1. 安装方式
```bash
# Go安装
go install github.com/your-org/ddd-gen@latest
# 二进制安装
curl -L https://github.com/your-org/ddd-gen/releases/latest/download/ddd-gen-$(uname -s)-$(uname -m) -o ddd-gen
chmod +x ddd-gen
sudo mv ddd-gen /usr/local/bin/
# Docker安装
docker run --rm -v $(pwd):/workspace ddd-gen domain user
```
### 2. 配置管理
```bash
# 初始化配置
ddd-gen init
# 查看配置
ddd-gen config show
# 编辑配置
ddd-gen config edit
# 验证配置
ddd-gen config validate
```
### 3. 集成CI/CD
```yaml
# GitHub Actions
- name: Generate DDD Code
run: |
ddd-gen domain user --config domains/user.yaml
ddd-gen domain product --config domains/product.yaml
- name: Validate Generated Code
run: |
go mod tidy
go vet ./...
golangci-lint run
```
## 开发计划
### 第一阶段:核心功能
- [ ] CLI框架搭建
- [ ] 基础模板系统
- [ ] 实体生成功能
- [ ] 仓储生成功能
- [ ] 应用服务生成功能
### 第二阶段:完整功能
- [ ] HTTP层生成
- [ ] DTO生成
- [ ] 测试生成
- [ ] 依赖注入配置
- [ ] 代码验证
### 第三阶段:高级功能
- [ ] 代码分析
- [ ] 智能建议
- [ ] 插件系统
- [ ] 自定义模板
- [ ] 批量操作
### 第四阶段:优化完善
- [ ] 性能优化
- [ ] 错误处理
- [ ] 文档完善
- [ ] 测试覆盖
- [ ] 用户反馈
## 总结
这个DDD代码生成器将显著提升开发效率确保代码质量和架构一致性。通过配置驱动的方式可以快速生成符合DDD架构的完整代码结构同时支持灵活的定制和扩展。
关键优势:
1. **高效开发**: 大幅减少重复代码编写
2. **架构一致**: 确保所有代码符合DDD规范
3. **质量保证**: 内置代码验证和测试生成
4. **灵活扩展**: 支持自定义模板和插件
5. **易于使用**: 友好的CLI和交互界面
你觉得这个策划方案如何?需要我开始实现吗?