# 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 [options] # 生成实体 ddd-gen entity [options] # 生成服务 ddd-gen service [options] # 生成API ddd-gen api [options] # 生成DTO ddd-gen dto [options] # 生成测试 ddd-gen test [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和交互界面 你觉得这个策划方案如何?需要我开始实现吗?