953 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			953 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | # DDD代码生成器可视化界面策划方案
 | |||
|  | 
 | |||
|  | ## 概述
 | |||
|  | 
 | |||
|  | DDD代码生成器可视化界面是一个基于Web的图形化工具,提供直观的拖拽式界面来设计和生成DDD架构代码。通过可视化界面,用户可以更轻松地设计领域模型、配置实体关系、预览生成的代码,大幅降低DDD架构的学习和使用门槛。 | |||
|  | 
 | |||
|  | ## 界面架构
 | |||
|  | 
 | |||
|  | ### 1. 整体布局
 | |||
|  | 
 | |||
|  | ``` | |||
|  | ┌─────────────────────────────────────────────────────────────┐ | |||
|  | │                    DDD代码生成器                            │ | |||
|  | ├─────────────────────────────────────────────────────────────┤ | |||
|  | │ 导航栏: [项目] [领域] [实体] [服务] [API] [配置] [生成]     │ | |||
|  | ├─────────────────────────────────────────────────────────────┤ | |||
|  | │ 工具栏: [新建] [打开] [保存] [导入] [导出] [预览] [生成]    │ | |||
|  | ├─────────────────────────────────────────────────────────────┤ | |||
|  | │ 左侧面板        │ 主工作区              │ 右侧面板          │ | |||
|  | │ ├─ 项目树       │ ├─ 可视化设计器       │ ├─ 属性面板        │ | |||
|  | │ ├─ 组件库       │ ├─ 关系图             │ ├─ 代码预览        │ | |||
|  | │ └─ 模板库       │ └─ 配置表单           │ └─ 日志面板        │ | |||
|  | └─────────────────────────────────────────────────────────────┘ | |||
|  | ``` | |||
|  | 
 | |||
|  | ### 2. 核心界面组件
 | |||
|  | 
 | |||
|  | #### 2.1 导航栏
 | |||
|  | - **项目管理**: 项目列表、新建项目、项目设置 | |||
|  | - **领域设计**: 领域列表、领域配置、领域关系 | |||
|  | - **实体管理**: 实体设计器、字段配置、业务方法 | |||
|  | - **服务配置**: 应用服务、领域服务、仓储配置 | |||
|  | - **API设计**: 接口设计、路由配置、响应格式 | |||
|  | - **代码生成**: 生成配置、预览、导出 | |||
|  | 
 | |||
|  | #### 2.2 左侧面板
 | |||
|  | - **项目树**: 显示项目结构和文件组织 | |||
|  | - **组件库**: 拖拽式组件(实体、枚举、服务、API) | |||
|  | - **模板库**: 预定义模板和自定义模板 | |||
|  | 
 | |||
|  | #### 2.3 主工作区
 | |||
|  | - **可视化设计器**: 拖拽式界面设计 | |||
|  | - **关系图**: 实体间关系可视化 | |||
|  | - **配置表单**: 详细的配置选项 | |||
|  | 
 | |||
|  | #### 2.4 右侧面板
 | |||
|  | - **属性面板**: 选中元素的属性编辑 | |||
|  | - **代码预览**: 实时预览生成的代码 | |||
|  | - **日志面板**: 操作日志和错误信息 | |||
|  | 
 | |||
|  | ## 功能模块
 | |||
|  | 
 | |||
|  | ### 1. 项目管理系统
 | |||
|  | 
 | |||
|  | #### 1.1 项目创建向导
 | |||
|  | ``` | |||
|  | ┌─────────────────────────────────────────┐ | |||
|  | │           新建项目向导                   │ | |||
|  | ├─────────────────────────────────────────┤ | |||
|  | │ 步骤 1: 项目基本信息                    │ | |||
|  | │ ┌─────────────────────────────────────┐ │ | |||
|  | │ │ 项目名称: [tyapi-server        ]    │ │ | |||
|  | │ │ 模块路径: [tyapi-server/internal]   │ │ | |||
|  | │ │ 作者:     [开发团队            ]    │ │ | |||
|  | │ │ 版本:     [1.0.0              ]    │ │ | |||
|  | │ └─────────────────────────────────────┘ │ | |||
|  | │                                         │ | |||
|  | │ 步骤 2: 项目结构选择                    │ | |||
|  | │ ┌─────────────────────────────────────┐ │ | |||
|  | │ │ ☑ 标准DDD结构                       │ │ | |||
|  | │ │ ☑ 包含认证模块                      │ │ | |||
|  | │ │ ☑ 包含日志系统                      │ │ | |||
|  | │ │ ☑ 包含测试框架                      │ │ | |||
|  | │ └─────────────────────────────────────┘ │ | |||
|  | │                                         │ | |||
|  | │ 步骤 3: 模板选择                        │ | |||
|  | │ ┌─────────────────────────────────────┐ │ | |||
|  | │ │ ☑ 中文注释模板                      │ │ | |||
|  | │ │ ☑ RESTful API模板                   │ │ | |||
|  | │ │ ☑ Swagger文档模板                   │ │ | |||
|  | │ └─────────────────────────────────────┘ │ | |||
|  | │                                         │ | |||
|  | │ [上一步] [下一步] [完成]                │ | |||
|  | └─────────────────────────────────────────┘ | |||
|  | ``` | |||
|  | 
 | |||
|  | #### 1.2 项目仪表板
 | |||
|  | ``` | |||
|  | ┌─────────────────────────────────────────┐ | |||
|  | │           项目仪表板                     │ | |||
|  | ├─────────────────────────────────────────┤ | |||
|  | │ 项目概览                                │ | |||
|  | │ ┌─────────────┬─────────────┬─────────┐ │ | |||
|  | │ │ 领域数量    │ 实体数量    │ API数量 │ │ | |||
|  | │ │     3       │    12      │   24    │ │ | |||
|  | │ └─────────────┴─────────────┴─────────┘ │ | |||
|  | │                                         │ | |||
|  | │ 最近活动                                │ | |||
|  | │ • 2024-01-15 14:30 创建用户域           │ | |||
|  | │ • 2024-01-15 14:25 添加产品实体         │ | |||
|  | │ • 2024-01-15 14:20 生成订单API          │ | |||
|  | │                                         │ | |||
|  | │ 快速操作                                │ | |||
|  | │ [新建领域] [导入配置] [生成代码] [导出]  │ | |||
|  | └─────────────────────────────────────────┘ | |||
|  | ``` | |||
|  | 
 | |||
|  | ### 2. 领域设计器
 | |||
|  | 
 | |||
|  | #### 2.1 领域概览
 | |||
|  | ``` | |||
|  | ┌─────────────────────────────────────────┐ | |||
|  | │           领域设计器                     │ | |||
|  | ├─────────────────────────────────────────┤ | |||
|  | │ 领域列表                                │ | |||
|  | │ ┌─────────────────────────────────────┐ │ | |||
|  | │ │ 📁 用户域 (user)                    │ │ | |||
|  | │ │   ├─ 👤 用户实体 (3个字段)          │ │ | |||
|  | │ │   ├─ 🔐 角色实体 (2个字段)          │ │ | |||
|  | │ │   └─ 🛡️ 权限实体 (2个字段)          │ │ | |||
|  | │ │                                     │ │ | |||
|  | │ │ 📁 产品域 (product)                 │ │ | |||
|  | │ │   ├─ 📦 产品实体 (5个字段)          │ │ | |||
|  | │ │   ├─ 🏷️ 分类实体 (3个字段)          │ │ | |||
|  | │ │   └─ 📄 文档实体 (4个字段)          │ │ | |||
|  | │ │                                     │ │ | |||
|  | │ │ 📁 订单域 (order)                   │ │ | |||
|  | │ │   ├─ 🛒 订单实体 (6个字段)          │ │ | |||
|  | │ │   └─ 📋 订单项实体 (4个字段)        │ │ | |||
|  | │ └─────────────────────────────────────┘ │ | |||
|  | │                                         │ | |||
|  | │ [新建领域] [编辑领域] [删除领域]        │ | |||
|  | └─────────────────────────────────────────┘ | |||
|  | ``` | |||
|  | 
 | |||
|  | #### 2.2 领域关系图
 | |||
|  | ``` | |||
|  | ┌─────────────────────────────────────────┐ | |||
|  | │           领域关系图                     │ | |||
|  | ├─────────────────────────────────────────┤ | |||
|  | │                                         │ | |||
|  | │    ┌─────────┐     ┌─────────┐          │ | |||
|  | │    │ 用户域  │     │ 产品域  │          │ | |||
|  | │    │         │     │         │          │ | |||
|  | │    │ ┌─────┐ │     │ ┌─────┐ │          │ | |||
|  | │    │ │用户 │ │     │ │产品 │ │          │ | |||
|  | │    │ └─────┘ │     │ └─────┘ │          │ | |||
|  | │    │    │    │     │    │    │          │ | |||
|  | │    │ ┌─────┐ │     │ ┌─────┐ │          │ | |||
|  | │    │ │角色 │ │     │ │分类 │ │          │ | |||
|  | │    │ └─────┘ │     │ └─────┘ │          │ | |||
|  | │    └─────────┘     └─────────┘          │ | |||
|  | │         │                │              │ | |||
|  | │         └────────────────┘              │ | |||
|  | │                │                        │ | |||
|  | │         ┌─────────┐                    │ | |||
|  | │         │ 订单域  │                    │ | |||
|  | │         │         │                    │ | |||
|  | │         │ ┌─────┐ │                    │ | |||
|  | │         │ │订单 │ │                    │ | |||
|  | │         │ └─────┘ │                    │ | |||
|  | │         │    │    │                    │ | |||
|  | │         │ ┌─────┐ │                    │ | |||
|  | │         │ │订单项│ │                    │ | |||
|  | │         │ └─────┘ │                    │ | |||
|  | │         └─────────┘                    │ | |||
|  | │                                         │ | |||
|  | │ [添加关系] [编辑关系] [删除关系]        │ | |||
|  | └─────────────────────────────────────────┘ | |||
|  | ``` | |||
|  | 
 | |||
|  | ### 3. 实体设计器
 | |||
|  | 
 | |||
|  | #### 3.1 实体可视化设计
 | |||
|  | ``` | |||
|  | ┌─────────────────────────────────────────┐ | |||
|  | │           实体设计器                     │ | |||
|  | ├─────────────────────────────────────────┤ | |||
|  | │ 实体: 用户 (User)                       │ | |||
|  | │ ┌─────────────────────────────────────┐ │ | |||
|  | │ │ ┌─────────────────────────────────┐ │ │ | |||
|  | │ │ │           用户实体              │ │ │ | |||
|  | │ │ ├─────────────────────────────────┤ │ │ | |||
|  | │ │ │ ID          string (主键)       │ │ │ | |||
|  | │ │ │ Username    string (唯一)       │ │ │ | |||
|  | │ │ │ Email       string (唯一)       │ │ │ | |||
|  | │ │ │ Password    string (密码)       │ │ │ | |||
|  | │ │ │ Status      UserStatus (状态)   │ │ │ | |||
|  | │ │ │ CreatedAt   time.Time (创建时间) │ │ │ | |||
|  | │ │ │ UpdatedAt   time.Time (更新时间) │ │ │ | |||
|  | │ │ │ DeletedAt   gorm.DeletedAt      │ │ │ | |||
|  | │ │ └─────────────────────────────────┘ │ │ | |||
|  | │ └─────────────────────────────────────┘ │ | |||
|  | │                                         │ | |||
|  | │ 业务方法                                │ | |||
|  | │ ┌─────────────────────────────────────┐ │ | |||
|  | │ │ ☑ IsActive() bool                   │ │ | |||
|  | │ │ ☑ CanLogin() bool                   │ │ | |||
|  | │ │ ☑ IsDeleted() bool                  │ │ | |||
|  | │ │ ☑ Enable()                          │ │ | |||
|  | │ │ ☑ Disable()                         │ │ | |||
|  | │ └─────────────────────────────────────┘ │ | |||
|  | │                                         │ | |||
|  | │ [添加字段] [编辑字段] [删除字段]        │ | |||
|  | │ [添加方法] [编辑方法] [删除方法]        │ | |||
|  | └─────────────────────────────────────────┘ | |||
|  | ``` | |||
|  | 
 | |||
|  | #### 3.2 字段配置面板
 | |||
|  | ``` | |||
|  | ┌─────────────────────────────────────────┐ | |||
|  | │           字段配置                       │ | |||
|  | ├─────────────────────────────────────────┤ | |||
|  | │ 字段名称: [Username              ]      │ | |||
|  | │ 字段类型: [string ▼]                   │ | |||
|  | │ 字段标签: [gorm:"type:varchar(50);uniqueIndex;not null"] │ | |||
|  | │ 字段注释: [用户名]                      │ | |||
|  | │                                         │ | |||
|  | │ 验证规则                                │ | |||
|  | │ ┌─────────────────────────────────────┐ │ | |||
|  | │ │ ☑ required (必填)                   │ │ | |||
|  | │ │ ☑ min=3 (最小长度3)                 │ │ | |||
|  | │ │ ☑ max=50 (最大长度50)               │ │ | |||
|  | │ │ ☑ unique (唯一性)                   │ │ | |||
|  | │ │ ☑ pattern=^[a-zA-Z0-9_]+$ (正则)   │ │ | |||
|  | │ └─────────────────────────────────────┘ │ | |||
|  | │                                         │ | |||
|  | │ 数据库配置                              │ | |||
|  | │ ┌─────────────────────────────────────┐ │ | |||
|  | │ │ 类型: varchar(50)                   │ │ | |||
|  | │ │ 索引: ☑ 普通索引 ☑ 唯一索引         │ │ | |||
|  | │ │ 约束: ☑ NOT NULL ☑ 默认值           │ │ | |||
|  | │ │ 默认值: [                          ] │ │ | |||
|  | │ └─────────────────────────────────────┘ │ | |||
|  | │                                         │ | |||
|  | │ [保存] [取消] [预览代码]                │ | |||
|  | └─────────────────────────────────────────┘ | |||
|  | ``` | |||
|  | 
 | |||
|  | ### 4. 服务配置器
 | |||
|  | 
 | |||
|  | #### 4.1 应用服务设计
 | |||
|  | ``` | |||
|  | ┌─────────────────────────────────────────┐ | |||
|  | │           应用服务配置                   │ | |||
|  | ├─────────────────────────────────────────┤ | |||
|  | │ 服务: 用户应用服务 (UserApplicationService) │ | |||
|  | │ ┌─────────────────────────────────────┐ │ | |||
|  | │ │ 基础CRUD操作                        │ │ | |||
|  | │ │ ☑ CreateUser (创建用户)             │ │ | |||
|  | │ │ ☑ UpdateUser (更新用户)             │ │ | |||
|  | │ │ ☑ DeleteUser (删除用户)             │ │ | |||
|  | │ │ ☑ GetUserByID (获取用户)            │ │ | |||
|  | │ │ ☑ ListUsers (用户列表)              │ │ | |||
|  | │ │                                     │ │ | |||
|  | │ │ 业务操作                            │ │ | |||
|  | │ │ ☑ EnableUser (启用用户)             │ │ | |||
|  | │ │ ☑ DisableUser (禁用用户)            │ │ | |||
|  | │ │ ☑ ResetPassword (重置密码)          │ │ | |||
|  | │ │ ☑ ChangeStatus (修改状态)           │ │ | |||
|  | │ │                                     │ │ | |||
|  | │ │ 统计功能                            │ │ | |||
|  | │ │ ☑ GetUserStats (用户统计)           │ │ | |||
|  | │ │ ☑ GetUserCount (用户数量)           │ │ | |||
|  | │ └─────────────────────────────────────┘ │ | |||
|  | │                                         │ | |||
|  | │ DTO配置                                │ | |||
|  | │ ┌─────────────────────────────────────┐ │ | |||
|  | │ │ 命令DTO: ☑ CreateUserCommand        │ │ | |||
|  | │ │ 查询DTO: ☑ GetUserQuery             │ │ | |||
|  | │ │ 响应DTO: ☑ UserInfoResponse         │ │ | |||
|  | │ │ 列表DTO: ☑ UserListResponse         │ │ | |||
|  | │ └─────────────────────────────────────┘ │ | |||
|  | │                                         │ | |||
|  | │ [添加方法] [编辑方法] [删除方法]        │ | |||
|  | └─────────────────────────────────────────┘ | |||
|  | ``` | |||
|  | 
 | |||
|  | ### 5. API设计器
 | |||
|  | 
 | |||
|  | #### 5.1 接口设计
 | |||
|  | ``` | |||
|  | ┌─────────────────────────────────────────┐ | |||
|  | │           API接口设计                    │ | |||
|  | ├─────────────────────────────────────────┤ | |||
|  | │ 接口列表                                │ | |||
|  | │ ┌─────────────────────────────────────┐ │ | |||
|  | │ │ GET    /api/v1/users                │ │ | |||
|  | │ │ POST   /api/v1/users                │ │ | |||
|  | │ │ GET    /api/v1/users/:id            │ │ | |||
|  | │ │ PUT    /api/v1/users/:id            │ │ | |||
|  | │ │ DELETE /api/v1/users/:id            │ │ | |||
|  | │ │ POST   /api/v1/users/:id/enable     │ │ | |||
|  | │ │ POST   /api/v1/users/:id/disable    │ │ | |||
|  | │ │ GET    /api/v1/users/stats          │ │ | |||
|  | │ └─────────────────────────────────────┘ │ | |||
|  | │                                         │ | |||
|  | │ 接口详情                                │ | |||
|  | │ ┌─────────────────────────────────────┐ │ | |||
|  | │ │ 路径: /api/v1/users                 │ │ | |||
|  | │ │ 方法: GET                           │ │ | |||
|  | │ │ 处理器: ListUsers                   │ │ | |||
|  | │ │ 描述: 获取用户列表                   │ │ | |||
|  | │ │                                     │ │ | |||
|  | │ │ 查询参数:                           │ │ | |||
|  | │ │ • page (int) - 页码                 │ │ | |||
|  | │ │ • page_size (int) - 每页数量        │ │ | |||
|  | │ │ • status (string) - 状态筛选        │ │ | |||
|  | │ │ • sort_by (string) - 排序字段       │ │ | |||
|  | │ │                                     │ │ | |||
|  | │ │ 响应格式:                           │ │ | |||
|  | │ │ • 200: UserListResponse             │ │ | |||
|  | │ │ • 400: ErrorResponse                │ │ | |||
|  | │ │ • 500: ErrorResponse                │ │ | |||
|  | │ └─────────────────────────────────────┘ │ | |||
|  | │                                         │ | |||
|  | │ [添加接口] [编辑接口] [删除接口]        │ | |||
|  | └─────────────────────────────────────────┘ | |||
|  | ``` | |||
|  | 
 | |||
|  | ### 6. 代码预览器
 | |||
|  | 
 | |||
|  | #### 6.1 实时代码预览
 | |||
|  | ``` | |||
|  | ┌─────────────────────────────────────────┐ | |||
|  | │           代码预览                       │ | |||
|  | ├─────────────────────────────────────────┤ | |||
|  | │ 文件类型: [实体 ▼] [仓储] [服务] [API]  │ | |||
|  | │ ┌─────────────────────────────────────┐ │ | |||
|  | │ │ // 用户实体                        │ │ | |||
|  | │ │ package entities                    │ │ | |||
|  | │ │                                     │ │ | |||
|  | │ │ import (                            │ │ | |||
|  | │ │     "time"                          │ │ | |||
|  | │ │     "gorm.io/gorm"                  │ │ | |||
|  | │ │ )                                   │ │ | |||
|  | │ │                                     │ │ | |||
|  | │ │ // User 用户实体                    │ │ | |||
|  | │ │ type User struct {                  │ │ | |||
|  | │ │     ID          string         `gorm:"primaryKey;type:varchar(36)" comment:"用户ID"` │ | |||
|  | │ │     Username    string         `gorm:"type:varchar(50);uniqueIndex;not null" comment:"用户名"` │ | |||
|  | │ │     Email       string         `gorm:"type:varchar(100);uniqueIndex;not null" comment:"邮箱"` │ | |||
|  | │ │     Password    string         `gorm:"type:varchar(255);not null" comment:"密码"` │ | |||
|  | │ │     Status      UserStatus     `gorm:"type:varchar(20);default:'active'" comment:"用户状态"` │ | |||
|  | │ │     CreatedAt   time.Time      `gorm:"autoCreateTime" comment:"创建时间"` │ | |||
|  | │ │     UpdatedAt   time.Time      `gorm:"autoUpdateTime" comment:"更新时间"` │ | |||
|  | │ │     DeletedAt   gorm.DeletedAt `gorm:"index" comment:"软删除时间"` │ | |||
|  | │ │ }                                   │ │ | |||
|  | │ │                                     │ │ | |||
|  | │ │ // 业务方法                          │ │ | |||
|  | │ │ func (u *User) IsActive() bool {    │ │ | |||
|  | │ │     return u.Status == UserStatusActive │ | |||
|  | │ │ }                                   │ │ | |||
|  | │ │                                     │ │ | |||
|  | │ │ func (u *User) CanLogin() bool {    │ │ | |||
|  | │ │     return u.IsActive() && !u.IsDeleted() │ | |||
|  | │ │ }                                   │ │ | |||
|  | │ └─────────────────────────────────────┘ │ | |||
|  | │                                         │ | |||
|  | │ [复制代码] [下载文件] [格式化] [语法检查] │ | |||
|  | └─────────────────────────────────────────┘ | |||
|  | ``` | |||
|  | 
 | |||
|  | ### 7. 生成配置器
 | |||
|  | 
 | |||
|  | #### 7.1 生成选项配置
 | |||
|  | ``` | |||
|  | ┌─────────────────────────────────────────┐ | |||
|  | │           生成配置                       │ | |||
|  | ├─────────────────────────────────────────┤ | |||
|  | │ 生成选项                                │ | |||
|  | │ ┌─────────────────────────────────────┐ │ | |||
|  | │ │ ☑ 生成实体文件                      │ │ | |||
|  | │ │ ☑ 生成仓储接口和实现                │ │ | |||
|  | │ │ ☑ 生成应用服务                      │ │ | |||
|  | │ │ ☑ 生成DTO对象                       │ │ | |||
|  | │ │ ☑ 生成HTTP处理器                    │ │ | |||
|  | │ │ ☑ 生成路由配置                      │ │ | |||
|  | │ │ ☑ 生成单元测试                      │ │ | |||
|  | │ │ ☑ 生成集成测试                      │ │ | |||
|  | │ │ ☑ 生成API文档                       │ │ | |||
|  | │ │ ☑ 更新依赖注入配置                  │ │ | |||
|  | │ └─────────────────────────────────────┘ │ | |||
|  | │                                         │ | |||
|  | │ 输出配置                                │ | |||
|  | │ ┌─────────────────────────────────────┐ │ | |||
|  | │ │ 输出目录: [./internal            ]  │ │ | |||
|  | │ │ 备份文件: ☑ 是 ☐ 否                │ │ | |||
|  | │ │ 格式化代码: ☑ 是 ☐ 否              │ │ | |||
|  | │ │ 运行测试: ☑ 是 ☐ 否                │ │ | |||
|  | │ │ 语法检查: ☑ 是 ☐ 否                │ │ | |||
|  | │ └─────────────────────────────────────┘ │ | |||
|  | │                                         │ | |||
|  | │ 模板配置                                │ | |||
|  | │ ┌─────────────────────────────────────┐ │ | |||
|  | │ │ 语言: [中文 ▼] [英文]               │ │ | |||
|  | │ │ 风格: [标准 ▼] [简洁] [详细]        │ │ | |||
|  | │ │ 注释风格: [中文 ▼] [英文] [混合]    │ │ | |||
|  | │ │ 错误处理: [统一 ▼] [详细] [简洁]    │ │ | |||
|  | │ └─────────────────────────────────────┘ │ | |||
|  | │                                         │ | |||
|  | │ [生成代码] [预览生成] [保存配置]        │ | |||
|  | └─────────────────────────────────────────┘ | |||
|  | ``` | |||
|  | 
 | |||
|  | ## 技术实现
 | |||
|  | 
 | |||
|  | ### 1. 前端技术栈
 | |||
|  | 
 | |||
|  | #### 1.1 核心框架
 | |||
|  | ```javascript | |||
|  | // 技术栈选择 | |||
|  | - React 18 + TypeScript | |||
|  | - Vite (构建工具) | |||
|  | - Tailwind CSS (样式框架) | |||
|  | - Zustand (状态管理) | |||
|  | - React Router (路由管理) | |||
|  | ``` | |||
|  | 
 | |||
|  | #### 1.2 UI组件库
 | |||
|  | ```javascript | |||
|  | // 组件库 | |||
|  | - Ant Design / Element Plus | |||
|  | - React Flow (流程图) | |||
|  | - Monaco Editor (代码编辑器) | |||
|  | - React DnD (拖拽功能) | |||
|  | - React Hook Form (表单管理) | |||
|  | ``` | |||
|  | 
 | |||
|  | #### 1.3 可视化库
 | |||
|  | ```javascript | |||
|  | // 可视化组件 | |||
|  | - D3.js (数据可视化) | |||
|  | - React Flow (流程图) | |||
|  | - Vis.js (关系图) | |||
|  | - Chart.js (图表) | |||
|  | ``` | |||
|  | 
 | |||
|  | ### 2. 后端技术栈
 | |||
|  | 
 | |||
|  | #### 2.1 API服务
 | |||
|  | ```go | |||
|  | // 后端技术栈 | |||
|  | - Gin (Web框架) | |||
|  | - GORM (数据库ORM) | |||
|  | - JWT (认证) | |||
|  | - Swagger (API文档) | |||
|  | - WebSocket (实时通信) | |||
|  | ``` | |||
|  | 
 | |||
|  | #### 2.2 代码生成引擎
 | |||
|  | ```go | |||
|  | // 生成引擎 | |||
|  | - Go Template (模板引擎) | |||
|  | - AST (代码分析) | |||
|  | - File System (文件操作) | |||
|  | - Git (版本控制) | |||
|  | ``` | |||
|  | 
 | |||
|  | ### 3. 数据存储
 | |||
|  | 
 | |||
|  | #### 3.1 数据库设计
 | |||
|  | ```sql | |||
|  | -- 项目表 | |||
|  | CREATE TABLE projects ( | |||
|  |     id VARCHAR(36) PRIMARY KEY, | |||
|  |     name VARCHAR(100) NOT NULL, | |||
|  |     module_path VARCHAR(200) NOT NULL, | |||
|  |     author VARCHAR(100), | |||
|  |     version VARCHAR(20), | |||
|  |     config JSON, | |||
|  |     created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, | |||
|  |     updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP | |||
|  | ); | |||
|  | 
 | |||
|  | -- 领域表 | |||
|  | CREATE TABLE domains ( | |||
|  |     id VARCHAR(36) PRIMARY KEY, | |||
|  |     project_id VARCHAR(36) NOT NULL, | |||
|  |     name VARCHAR(50) NOT NULL, | |||
|  |     description TEXT, | |||
|  |     config JSON, | |||
|  |     created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, | |||
|  |     FOREIGN KEY (project_id) REFERENCES projects(id) | |||
|  | ); | |||
|  | 
 | |||
|  | -- 实体表 | |||
|  | CREATE TABLE entities ( | |||
|  |     id VARCHAR(36) PRIMARY KEY, | |||
|  |     domain_id VARCHAR(36) NOT NULL, | |||
|  |     name VARCHAR(50) NOT NULL, | |||
|  |     description TEXT, | |||
|  |     fields JSON, | |||
|  |     methods JSON, | |||
|  |     created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, | |||
|  |     FOREIGN KEY (domain_id) REFERENCES domains(id) | |||
|  | ); | |||
|  | 
 | |||
|  | -- 服务表 | |||
|  | CREATE TABLE services ( | |||
|  |     id VARCHAR(36) PRIMARY KEY, | |||
|  |     domain_id VARCHAR(36) NOT NULL, | |||
|  |     name VARCHAR(50) NOT NULL, | |||
|  |     type ENUM('application', 'domain', 'infrastructure'), | |||
|  |     methods JSON, | |||
|  |     created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, | |||
|  |     FOREIGN KEY (domain_id) REFERENCES domains(id) | |||
|  | ); | |||
|  | 
 | |||
|  | -- API表 | |||
|  | CREATE TABLE apis ( | |||
|  |     id VARCHAR(36) PRIMARY KEY, | |||
|  |     domain_id VARCHAR(36) NOT NULL, | |||
|  |     path VARCHAR(200) NOT NULL, | |||
|  |     method VARCHAR(10) NOT NULL, | |||
|  |     handler VARCHAR(100), | |||
|  |     summary TEXT, | |||
|  |     config JSON, | |||
|  |     created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, | |||
|  |     FOREIGN KEY (domain_id) REFERENCES domains(id) | |||
|  | ); | |||
|  | ``` | |||
|  | 
 | |||
|  | ## 部署方案
 | |||
|  | 
 | |||
|  | ### 1. 开发环境
 | |||
|  | 
 | |||
|  | #### 1.1 本地开发
 | |||
|  | ```bash | |||
|  | # 前端开发
 | |||
|  | cd ddd-gen-ui | |||
|  | npm install | |||
|  | npm run dev | |||
|  | 
 | |||
|  | # 后端开发
 | |||
|  | cd ddd-gen-server | |||
|  | go mod tidy | |||
|  | go run main.go | |||
|  | 
 | |||
|  | # 数据库
 | |||
|  | docker-compose up -d postgres redis | |||
|  | ``` | |||
|  | 
 | |||
|  | #### 1.2 Docker开发
 | |||
|  | ```yaml | |||
|  | # docker-compose.dev.yml
 | |||
|  | version: '3.8' | |||
|  | services: | |||
|  |   frontend: | |||
|  |     build: ./ddd-gen-ui | |||
|  |     ports: | |||
|  |       - "3000:3000" | |||
|  |     volumes: | |||
|  |       - ./ddd-gen-ui:/app | |||
|  |       - /app/node_modules | |||
|  |     environment: | |||
|  |       - REACT_APP_API_URL=http://localhost:8080 | |||
|  | 
 | |||
|  |   backend: | |||
|  |     build: ./ddd-gen-server | |||
|  |     ports: | |||
|  |       - "8080:8080" | |||
|  |     volumes: | |||
|  |       - ./ddd-gen-server:/app | |||
|  |     environment: | |||
|  |       - DB_HOST=postgres | |||
|  |       - REDIS_HOST=redis | |||
|  | 
 | |||
|  |   postgres: | |||
|  |     image: postgres:15 | |||
|  |     environment: | |||
|  |       - POSTGRES_DB=ddd_gen | |||
|  |       - POSTGRES_USER=ddd_gen | |||
|  |       - POSTGRES_PASSWORD=ddd_gen | |||
|  |     ports: | |||
|  |       - "5432:5432" | |||
|  |     volumes: | |||
|  |       - postgres_data:/var/lib/postgresql/data | |||
|  | 
 | |||
|  |   redis: | |||
|  |     image: redis:7-alpine | |||
|  |     ports: | |||
|  |       - "6379:6379" | |||
|  | 
 | |||
|  | volumes: | |||
|  |   postgres_data: | |||
|  | ``` | |||
|  | 
 | |||
|  | ### 2. 生产环境
 | |||
|  | 
 | |||
|  | #### 2.1 容器化部署
 | |||
|  | ```yaml | |||
|  | # docker-compose.prod.yml
 | |||
|  | version: '3.8' | |||
|  | services: | |||
|  |   nginx: | |||
|  |     image: nginx:alpine | |||
|  |     ports: | |||
|  |       - "80:80" | |||
|  |       - "443:443" | |||
|  |     volumes: | |||
|  |       - ./nginx.conf:/etc/nginx/nginx.conf | |||
|  |       - ./ssl:/etc/nginx/ssl | |||
|  |     depends_on: | |||
|  |       - frontend | |||
|  |       - backend | |||
|  | 
 | |||
|  |   frontend: | |||
|  |     build: ./ddd-gen-ui | |||
|  |     environment: | |||
|  |       - NODE_ENV=production | |||
|  |       - REACT_APP_API_URL=https://api.ddd-gen.com | |||
|  | 
 | |||
|  |   backend: | |||
|  |     build: ./ddd-gen-server | |||
|  |     environment: | |||
|  |       - GIN_MODE=release | |||
|  |       - DB_HOST=postgres | |||
|  |       - REDIS_HOST=redis | |||
|  |     depends_on: | |||
|  |       - postgres | |||
|  |       - redis | |||
|  | 
 | |||
|  |   postgres: | |||
|  |     image: postgres:15 | |||
|  |     environment: | |||
|  |       - POSTGRES_DB=ddd_gen | |||
|  |       - POSTGRES_USER=ddd_gen | |||
|  |       - POSTGRES_PASSWORD=${DB_PASSWORD} | |||
|  |     volumes: | |||
|  |       - postgres_data:/var/lib/postgresql/data | |||
|  |     restart: unless-stopped | |||
|  | 
 | |||
|  |   redis: | |||
|  |     image: redis:7-alpine | |||
|  |     volumes: | |||
|  |       - redis_data:/data | |||
|  |     restart: unless-stopped | |||
|  | 
 | |||
|  | volumes: | |||
|  |   postgres_data: | |||
|  |   redis_data: | |||
|  | ``` | |||
|  | 
 | |||
|  | #### 2.2 Kubernetes部署
 | |||
|  | ```yaml | |||
|  | # k8s-deployment.yaml
 | |||
|  | apiVersion: apps/v1 | |||
|  | kind: Deployment | |||
|  | metadata: | |||
|  |   name: ddd-gen-frontend | |||
|  | spec: | |||
|  |   replicas: 3 | |||
|  |   selector: | |||
|  |     matchLabels: | |||
|  |       app: ddd-gen-frontend | |||
|  |   template: | |||
|  |     metadata: | |||
|  |       labels: | |||
|  |         app: ddd-gen-frontend | |||
|  |     spec: | |||
|  |       containers: | |||
|  |       - name: frontend | |||
|  |         image: ddd-gen/frontend:latest | |||
|  |         ports: | |||
|  |         - containerPort: 3000 | |||
|  |         resources: | |||
|  |           requests: | |||
|  |             memory: "128Mi" | |||
|  |             cpu: "100m" | |||
|  |           limits: | |||
|  |             memory: "256Mi" | |||
|  |             cpu: "200m" | |||
|  | 
 | |||
|  | --- | |||
|  | apiVersion: v1 | |||
|  | kind: Service | |||
|  | metadata: | |||
|  |   name: ddd-gen-frontend-service | |||
|  | spec: | |||
|  |   selector: | |||
|  |     app: ddd-gen-frontend | |||
|  |   ports: | |||
|  |   - port: 80 | |||
|  |     targetPort: 3000 | |||
|  |   type: LoadBalancer | |||
|  | ``` | |||
|  | 
 | |||
|  | ## 用户体验设计
 | |||
|  | 
 | |||
|  | ### 1. 交互设计
 | |||
|  | 
 | |||
|  | #### 1.1 拖拽操作
 | |||
|  | - **实体拖拽**: 从组件库拖拽实体到设计器 | |||
|  | - **字段拖拽**: 拖拽字段到实体中 | |||
|  | - **关系拖拽**: 拖拽连线建立实体关系 | |||
|  | - **方法拖拽**: 拖拽方法到实体或服务中 | |||
|  | 
 | |||
|  | #### 1.2 快捷键支持
 | |||
|  | ```javascript | |||
|  | // 快捷键配置 | |||
|  | const shortcuts = { | |||
|  |   'Ctrl+N': '新建项目', | |||
|  |   'Ctrl+O': '打开项目', | |||
|  |   'Ctrl+S': '保存项目', | |||
|  |   'Ctrl+Shift+S': '另存为', | |||
|  |   'Ctrl+Z': '撤销', | |||
|  |   'Ctrl+Y': '重做', | |||
|  |   'Ctrl+D': '复制', | |||
|  |   'Ctrl+X': '剪切', | |||
|  |   'Ctrl+V': '粘贴', | |||
|  |   'Delete': '删除', | |||
|  |   'F5': '刷新', | |||
|  |   'Ctrl+P': '预览', | |||
|  |   'Ctrl+G': '生成代码' | |||
|  | }; | |||
|  | ``` | |||
|  | 
 | |||
|  | #### 1.3 智能提示
 | |||
|  | - **字段类型提示**: 根据字段名自动推荐类型 | |||
|  | - **验证规则提示**: 根据字段类型推荐验证规则 | |||
|  | - **方法名提示**: 根据实体名推荐方法名 | |||
|  | - **API路径提示**: 根据RESTful规范推荐路径 | |||
|  | 
 | |||
|  | ### 2. 响应式设计
 | |||
|  | 
 | |||
|  | #### 2.1 多设备支持
 | |||
|  | ```css | |||
|  | /* 响应式断点 */ | |||
|  | @media (max-width: 768px) { | |||
|  |   /* 移动端布局 */ | |||
|  |   .sidebar { display: none; } | |||
|  |   .main-content { width: 100%; } | |||
|  |   .toolbar { flex-direction: column; } | |||
|  | } | |||
|  | 
 | |||
|  | @media (max-width: 1024px) { | |||
|  |   /* 平板端布局 */ | |||
|  |   .sidebar { width: 200px; } | |||
|  |   .main-content { width: calc(100% - 200px); } | |||
|  | } | |||
|  | 
 | |||
|  | @media (min-width: 1025px) { | |||
|  |   /* 桌面端布局 */ | |||
|  |   .sidebar { width: 250px; } | |||
|  |   .main-content { width: calc(100% - 250px); } | |||
|  | } | |||
|  | ``` | |||
|  | 
 | |||
|  | #### 2.2 主题支持
 | |||
|  | ```javascript | |||
|  | // 主题配置 | |||
|  | const themes = { | |||
|  |   light: { | |||
|  |     primary: '#1890ff', | |||
|  |     background: '#ffffff', | |||
|  |     text: '#000000', | |||
|  |     border: '#d9d9d9' | |||
|  |   }, | |||
|  |   dark: { | |||
|  |     primary: '#177ddc', | |||
|  |     background: '#141414', | |||
|  |     text: '#ffffff', | |||
|  |     border: '#434343' | |||
|  |   } | |||
|  | }; | |||
|  | ``` | |||
|  | 
 | |||
|  | ## 扩展功能
 | |||
|  | 
 | |||
|  | ### 1. 插件系统
 | |||
|  | 
 | |||
|  | #### 1.1 插件接口
 | |||
|  | ```typescript | |||
|  | // 插件接口定义 | |||
|  | interface Plugin { | |||
|  |   name: string; | |||
|  |   version: string; | |||
|  |   description: string; | |||
|  |   author: string; | |||
|  |   icon: string; | |||
|  |    | |||
|  |   // 生命周期钩子 | |||
|  |   onInstall(): void; | |||
|  |   onUninstall(): void; | |||
|  |   onActivate(): void; | |||
|  |   onDeactivate(): void; | |||
|  |    | |||
|  |   // 功能钩子 | |||
|  |   onEntityCreate?(entity: Entity): void; | |||
|  |   onEntityUpdate?(entity: Entity): void; | |||
|  |   onCodeGenerate?(config: GenerateConfig): void; | |||
|  | } | |||
|  | ``` | |||
|  | 
 | |||
|  | #### 1.2 内置插件
 | |||
|  | ```javascript | |||
|  | // 内置插件列表 | |||
|  | const builtinPlugins = [ | |||
|  |   { | |||
|  |     name: 'linter', | |||
|  |     description: '代码规范检查', | |||
|  |     icon: '🔍' | |||
|  |   }, | |||
|  |   { | |||
|  |     name: 'test-generator', | |||
|  |     description: '测试代码生成', | |||
|  |     icon: '🧪' | |||
|  |   }, | |||
|  |   { | |||
|  |     name: 'docs-generator', | |||
|  |     description: '文档生成', | |||
|  |     icon: '📚' | |||
|  |   }, | |||
|  |   { | |||
|  |     name: 'migration-generator', | |||
|  |     description: '数据库迁移生成', | |||
|  |     icon: '🗄️' | |||
|  |   } | |||
|  | ]; | |||
|  | ``` | |||
|  | 
 | |||
|  | ### 2. 协作功能
 | |||
|  | 
 | |||
|  | #### 2.1 实时协作
 | |||
|  | ```javascript | |||
|  | // WebSocket实时通信 | |||
|  | const socket = new WebSocket('ws://localhost:8080/ws'); | |||
|  | 
 | |||
|  | socket.onmessage = (event) => { | |||
|  |   const data = JSON.parse(event.data); | |||
|  |    | |||
|  |   switch (data.type) { | |||
|  |     case 'entity_updated': | |||
|  |       updateEntity(data.entity); | |||
|  |       break; | |||
|  |     case 'user_joined': | |||
|  |       addCollaborator(data.user); | |||
|  |       break; | |||
|  |     case 'user_left': | |||
|  |       removeCollaborator(data.user); | |||
|  |       break; | |||
|  |   } | |||
|  | }; | |||
|  | ``` | |||
|  | 
 | |||
|  | #### 2.2 版本控制
 | |||
|  | ```javascript | |||
|  | // Git集成 | |||
|  | class GitManager { | |||
|  |   async init() { | |||
|  |     // 初始化Git仓库 | |||
|  |   } | |||
|  |    | |||
|  |   async commit(message) { | |||
|  |     // 提交更改 | |||
|  |   } | |||
|  |    | |||
|  |   async push() { | |||
|  |     // 推送到远程 | |||
|  |   } | |||
|  |    | |||
|  |   async pull() { | |||
|  |     // 拉取更新 | |||
|  |   } | |||
|  |    | |||
|  |   async branch(name) { | |||
|  |     // 创建分支 | |||
|  |   } | |||
|  | } | |||
|  | ``` | |||
|  | 
 | |||
|  | ### 3. 导入导出
 | |||
|  | 
 | |||
|  | #### 3.1 格式支持
 | |||
|  | ```javascript | |||
|  | // 支持的导入格式 | |||
|  | const importFormats = [ | |||
|  |   'json',      // JSON配置 | |||
|  |   'yaml',      // YAML配置 | |||
|  |   'xml',       // XML配置 | |||
|  |   'sql',       // 数据库结构 | |||
|  |   'openapi',   // OpenAPI规范 | |||
|  |   'swagger',   // Swagger文档 | |||
|  |   'plantuml',  // PlantUML图 | |||
|  |   'mermaid'    // Mermaid图 | |||
|  | ]; | |||
|  | 
 | |||
|  | // 支持的导出格式 | |||
|  | const exportFormats = [ | |||
|  |   'json',      // JSON配置 | |||
|  |   'yaml',      // YAML配置 | |||
|  |   'zip',       // 完整项目 | |||
|  |   'tar.gz',    // 压缩包 | |||
|  |   'docker',    // Docker镜像 | |||
|  |   'helm',      // Helm Chart | |||
|  |   'terraform'  // Terraform配置 | |||
|  | ]; | |||
|  | ``` | |||
|  | 
 | |||
|  | ## 开发计划
 | |||
|  | 
 | |||
|  | ### 第一阶段:基础界面 (4周)
 | |||
|  | - [ ] 项目管理系统 | |||
|  | - [ ] 基础UI框架 | |||
|  | - [ ] 实体设计器 | |||
|  | - [ ] 字段配置器 | |||
|  | 
 | |||
|  | ### 第二阶段:核心功能 (6周)
 | |||
|  | - [ ] 领域设计器 | |||
|  | - [ ] 服务配置器 | |||
|  | - [ ] API设计器 | |||
|  | - [ ] 代码预览器 | |||
|  | 
 | |||
|  | ### 第三阶段:高级功能 (4周)
 | |||
|  | - [ ] 可视化关系图 | |||
|  | - [ ] 拖拽操作 | |||
|  | - [ ] 实时协作 | |||
|  | - [ ] 插件系统 | |||
|  | 
 | |||
|  | ### 第四阶段:优化完善 (2周)
 | |||
|  | - [ ] 性能优化 | |||
|  | - [ ] 用户体验 | |||
|  | - [ ] 文档完善 | |||
|  | - [ ] 测试覆盖 | |||
|  | 
 | |||
|  | ## 总结
 | |||
|  | 
 | |||
|  | 这个可视化界面将为DDD代码生成器提供: | |||
|  | 
 | |||
|  | ### 🎯 核心优势
 | |||
|  | 1. **直观易用**: 图形化界面,降低学习门槛 | |||
|  | 2. **可视化设计**: 拖拽式操作,所见即所得 | |||
|  | 3. **实时预览**: 代码实时预览,即时反馈 | |||
|  | 4. **协作支持**: 多人实时协作,提升团队效率 | |||
|  | 5. **扩展性强**: 插件系统,支持功能扩展 | |||
|  | 
 | |||
|  | ### 🚀 技术特色
 | |||
|  | 1. **现代化技术栈**: React + TypeScript + Go | |||
|  | 2. **响应式设计**: 支持多设备访问 | |||
|  | 3. **实时通信**: WebSocket实时协作 | |||
|  | 4. **版本控制**: Git集成 | |||
|  | 5. **容器化部署**: Docker + Kubernetes | |||
|  | 
 | |||
|  | ### 💡 创新点
 | |||
|  | 1. **可视化DDD设计**: 首次将DDD设计可视化 | |||
|  | 2. **智能代码生成**: 基于配置的智能生成 | |||
|  | 3. **实时协作**: 支持多人同时编辑 | |||
|  | 4. **插件生态**: 可扩展的插件系统 | |||
|  | 
 | |||
|  | 这个可视化界面将大大提升DDD代码生成器的易用性和实用性,让DDD架构设计变得更加直观和高效! | |||
|  | 
 | |||
|  | 你觉得这个可视化界面策划方案如何?需要我开始实现吗?  |