Files
tyapi-server/docs/DDD代码生成器策划方案.md
2025-07-15 13:21:34 +08:00

653 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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和交互界面
你觉得这个策划方案如何?需要我开始实现吗?