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

15 KiB
Raw Permalink Blame History

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. 新项目初始化

# 生成完整的用户域
ddd-gen domain user --entities user,role,permission --features auth,profile

# 生成产品域
ddd-gen domain product --entities product,category,order --features catalog,order

2. 现有项目扩展

# 在用户域中添加新实体
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. 批量操作

# 批量生成多个域
ddd-gen batch --config domains.yaml

# 批量添加字段
ddd-gen batch-fields --config fields.yaml

配置文件

1. 项目配置 (ddd-config.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)

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. 主要命令

# 生成完整领域
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. 选项参数

# 通用选项
--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. 交互式模式

# 交互式生成领域
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. 模板变量

// 基础变量
{{.DomainName}}           // 领域名称
{{.EntityName}}           // 实体名称
{{.ServiceName}}          // 服务名称
{{.PackageName}}          // 包名称
{{.ModulePath}}           // 模块路径

// 实体变量
{{.Fields}}               // 字段列表
{{.Methods}}              // 方法列表
{{.Enums}}                // 枚举列表
{{.Relations}}            // 关联关系

// 服务变量
{{.Commands}}             // 命令列表
{{.Queries}}              // 查询列表
{{.Responses}}            // 响应列表

// API变量
{{.Routes}}               // 路由列表
{{.Handlers}}             // 处理器列表
{{.Middlewares}}          // 中间件列表

// 项目变量
{{.ProjectName}}          // 项目名称
{{.Author}}               // 作者
{{.Version}}              // 版本
{{.Timestamp}}            // 时间戳

3. 条件渲染

{{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分析

// 分析现有代码结构
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. 命名分析

// 命名规范检查
type NamingAnalyzer struct {
    rules []NamingRule
}

// 检查命名规范
func (na *NamingAnalyzer) CheckNaming(name, type string) error {
    // 检查命名规范
    // 提供建议
    // 自动修正
}

验证系统

1. 语法验证

// 验证生成的代码
func ValidateCode(code string) error {
    // 解析Go代码
    // 检查语法错误
    // 验证类型
    // 检查导入
}

2. 规范检查

// 检查代码规范
func CheckCodeStyle(code string) []StyleIssue {
    // 检查格式
    // 检查命名
    // 检查注释
    // 检查复杂度
}

3. 依赖验证

// 验证依赖关系
func ValidateDependencies(domain *Domain) error {
    // 检查循环依赖
    // 验证接口实现
    // 检查导入路径
}

扩展功能

1. 插件系统

// 插件接口
type Plugin interface {
    Name() string
    Execute(ctx *Context) error
    Validate(ctx *Context) error
}

// 内置插件
var BuiltinPlugins = []Plugin{
    &LinterPlugin{},
    &TestPlugin{},
    &DocsPlugin{},
    &MigrationPlugin{},
}

2. 自定义模板

// 模板注册
func RegisterTemplate(name, content string) error {
    // 验证模板语法
    // 注册模板
    // 更新索引
}

3. 代码转换

// 代码转换器
type CodeTransformer struct {
    rules []TransformRule
}

// 转换现有代码
func (ct *CodeTransformer) Transform(code string) (string, error) {
    // 应用转换规则
    // 保持代码结构
    // 更新引用
}

部署方案

1. 安装方式

# 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. 配置管理

# 初始化配置
ddd-gen init

# 查看配置
ddd-gen config show

# 编辑配置
ddd-gen config edit

# 验证配置
ddd-gen config validate

3. 集成CI/CD

# 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和交互界面

你觉得这个策划方案如何?需要我开始实现吗?