|
| 1 | +# Spring Boot代码生成器项目重构说明文档 |
| 2 | + |
| 3 | +## 1. 重构概述 |
| 4 | + |
| 5 | +本项目旨在对Spring Boot代码生成器进行现代化重构,使其具有更清晰的架构、更好的可维护性和更强的扩展性。重构遵循现代Spring Boot应用的最佳实践,采用了分层架构设计和多种设计模式。 |
| 6 | + |
| 7 | +## 2. 重构目标 |
| 8 | + |
| 9 | +1. **清晰的分层架构**:明确Controller、Service、DTO、VO等各层职责 |
| 10 | +2. **良好的可扩展性**:通过策略模式处理不同类型的SQL解析 |
| 11 | +3. **现代化开发规范**:遵循Spring Boot和Java开发最佳实践 |
| 12 | +4. **易于维护**:通过合理的包结构和命名规范提高代码可读性 |
| 13 | +5. **前后端兼容性**:保持与现有前端代码的数据交互格式 |
| 14 | + |
| 15 | +## 3. 重构后项目结构 |
| 16 | + |
| 17 | +``` |
| 18 | +com.softdev.system.generator |
| 19 | +├── GeneratorApplication.java # 启动类 |
| 20 | +├── config # 配置类包 |
| 21 | +│ ├── WebMvcConfig.java # MVC配置 |
| 22 | +│ └── GlobalExceptionHandler.java # 全局异常处理器 |
| 23 | +├── controller # 控制层 |
| 24 | +│ ├── PageController.java # 页面跳转控制器 |
| 25 | +│ ├── CodeGenController.java # 代码生成相关接口 |
| 26 | +│ └── TemplateController.java # 模板相关接口 |
| 27 | +├── service # 服务层接口 |
| 28 | +│ ├── CodeGenService.java # 代码生成服务接口 |
| 29 | +│ ├── TemplateService.java # 模板服务接口 |
| 30 | +│ └── parser |
| 31 | +│ ├── SqlParserService.java # SQL解析服务接口 |
| 32 | +│ └── JsonParserService.java # JSON解析服务接口 |
| 33 | +├── service.impl # 服务实现层 |
| 34 | +│ ├── CodeGenServiceImpl.java # 代码生成服务实现 |
| 35 | +│ ├── TemplateServiceImpl.java # 模板服务实现 |
| 36 | +│ └── parser |
| 37 | +│ ├── SqlParserServiceImpl.java # SQL解析服务实现 |
| 38 | +│ └── JsonParserServiceImpl.java # JSON解析服务实现 |
| 39 | +├── entity # 实体类 |
| 40 | +│ ├── dto |
| 41 | +│ │ ├── ParamInfo.java # 参数信息DTO |
| 42 | +│ │ ├── ClassInfo.java # 类信息DTO |
| 43 | +│ │ └── FieldInfo.java # 字段信息DTO |
| 44 | +│ ├── vo |
| 45 | +│ │ └── ResultVo.java # 统一返回结果VO |
| 46 | +│ └── enums |
| 47 | +│ └── ParserTypeEnum.java # 解析类型枚举 |
| 48 | +├── util # 工具类包 |
| 49 | +│ ├── FreemarkerUtil.java # Freemarker工具类 |
| 50 | +│ ├── StringUtilsPlus.java # 字符串工具类 |
| 51 | +│ ├── MapUtil.java # Map工具类 |
| 52 | +│ ├── mysqlJavaTypeUtil.java # MySQL类型转换工具类 |
| 53 | +│ └── exception |
| 54 | +│ ├── CodeGenException.java # 自定义业务异常 |
| 55 | +│ └── SqlParseException.java # SQL解析异常 |
| 56 | +└── constant # 常量定义 |
| 57 | + └── CodeGenConstants.java # 代码生成常量(待实现) |
| 58 | +``` |
| 59 | + |
| 60 | +## 4. 各层详细说明 |
| 61 | + |
| 62 | +### 4.1 控制层 (Controller) |
| 63 | + |
| 64 | +控制层负责处理HTTP请求,协调业务逻辑并返回结果: |
| 65 | + |
| 66 | +1. **[PageController](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/controller/PageController.java)**: |
| 67 | + - 处理页面跳转请求 |
| 68 | + - 返回视图页面 |
| 69 | + |
| 70 | +2. **[CodeGenController](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/controller/CodeGenController.java)**: |
| 71 | + - 提供代码生成相关REST API |
| 72 | + - 处理代码生成请求 |
| 73 | + |
| 74 | +3. **[TemplateController](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/controller/TemplateController.java)**: |
| 75 | + - 提供模板管理相关REST API |
| 76 | + - 处理模板获取请求 |
| 77 | + |
| 78 | +### 4.2 服务层 (Service) |
| 79 | + |
| 80 | +服务层采用接口与实现分离的设计,便于测试和扩展: |
| 81 | + |
| 82 | +1. **接口层**: |
| 83 | + - [CodeGenService](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/CodeGenService.java): 核心代码生成服务接口 |
| 84 | + - [TemplateService](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/TemplateService.java): 模板管理服务接口 |
| 85 | + - [SqlParserService](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/parser/SqlParserService.java): SQL解析服务接口 |
| 86 | + - [JsonParserService](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/parser/JsonParserService.java): JSON解析服务接口 |
| 87 | + |
| 88 | +2. **实现层**: |
| 89 | + - [CodeGenServiceImpl](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/impl/CodeGenServiceImpl.java): 核心代码生成服务实现 |
| 90 | + - [TemplateServiceImpl](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/impl/TemplateServiceImpl.java): 模板管理服务实现 |
| 91 | + - [SqlParserServiceImpl](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/impl/parser/SqlParserServiceImpl.java): SQL解析服务实现 |
| 92 | + - [JsonParserServiceImpl](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/impl/parser/JsonParserServiceImpl.java): JSON解析服务实现 |
| 93 | + |
| 94 | +### 4.3 实体层 (Entity) |
| 95 | + |
| 96 | +实体层按照用途分类,避免不同类型对象混用: |
| 97 | + |
| 98 | +1. **DTO (Data Transfer Object)**: |
| 99 | + - [ParamInfo](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/entity/dto/ParamInfo.java): 参数信息传输对象 |
| 100 | + - [ClassInfo](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/entity/dto/ClassInfo.java): 类信息传输对象 |
| 101 | + - [FieldInfo](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/entity/dto/FieldInfo.java): 字段信息传输对象 |
| 102 | + |
| 103 | +2. **VO (View Object)**: |
| 104 | + - [ResultVo](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/entity/vo/ResultVo.java): 统一返回结果视图对象 |
| 105 | + |
| 106 | +3. **Enums**: |
| 107 | + - [ParserTypeEnum](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/entity/enums/ParserTypeEnum.java): 解析类型枚举 |
| 108 | + |
| 109 | +### 4.4 工具层 (Util) |
| 110 | + |
| 111 | +工具层包含各种通用工具类和自定义异常: |
| 112 | + |
| 113 | +1. **工具类**: |
| 114 | + - [FreemarkerUtil](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/util/FreemarkerUtil.java): Freemarker模板处理工具 |
| 115 | + - [StringUtilsPlus](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/util/StringUtilsPlus.java): 字符串处理工具 |
| 116 | + - [MapUtil](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/util/MapUtil.java): Map操作工具 |
| 117 | + - [mysqlJavaTypeUtil](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/util/mysqlJavaTypeUtil.java): MySQL与Java类型映射工具 |
| 118 | + |
| 119 | +2. **异常类**: |
| 120 | + - [CodeGenException](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/util/exception/CodeGenException.java): 代码生成自定义业务异常 |
| 121 | + - [SqlParseException](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/util/exception/SqlParseException.java): SQL解析异常 |
| 122 | + |
| 123 | +## 5. 关键设计模式应用 |
| 124 | + |
| 125 | +### 5.1 策略模式 |
| 126 | + |
| 127 | +在SQL解析功能中应用策略模式,将不同的解析方式封装成独立的策略类: |
| 128 | + |
| 129 | +1. [SqlParserServiceImpl](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/impl/parser/SqlParserServiceImpl.java)中实现了多种SQL解析方法: |
| 130 | + - `processTableIntoClassInfo`: 默认SQL解析 |
| 131 | + - `generateSelectSqlBySQLPraser`: SELECT SQL解析 |
| 132 | + - `generateCreateSqlBySQLPraser`: CREATE SQL解析 |
| 133 | + - `processTableToClassInfoByRegex`: 正则表达式解析 |
| 134 | + - `processInsertSqlToClassInfo`: INSERT SQL解析 |
| 135 | + |
| 136 | +2. [JsonParserServiceImpl](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/impl/parser/JsonParserServiceImpl.java)中实现了JSON解析: |
| 137 | + - `processJsonToClassInfo`: JSON解析 |
| 138 | + |
| 139 | +通过策略模式,可以: |
| 140 | +- 避免大量的if-else判断 |
| 141 | +- 便于添加新的解析策略 |
| 142 | +- 提高代码的可维护性 |
| 143 | + |
| 144 | +### 5.2 接口与实现分离 |
| 145 | + |
| 146 | +所有服务层都采用接口与实现分离的设计,便于: |
| 147 | +- 单元测试模拟 |
| 148 | +- 多种实现方式切换 |
| 149 | +- 降低模块间耦合度 |
| 150 | + |
| 151 | +## 6. 重要技术实现细节 |
| 152 | + |
| 153 | +### 6.1 统一响应格式 |
| 154 | + |
| 155 | +所有控制器方法均返回 [ResultVo](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/entity/vo/ResultVo.java) 统一响应对象,保持与前端的兼容性: |
| 156 | + |
| 157 | +```java |
| 158 | +// 成功响应 |
| 159 | +ResultVo.ok(data) |
| 160 | + |
| 161 | +// 错误响应 |
| 162 | +ResultVo.error(message) |
| 163 | +``` |
| 164 | + |
| 165 | +### 6.2 前后端兼容性处理 |
| 166 | + |
| 167 | +为了保持与现有前端JavaScript代码的兼容性,在处理响应数据时特别注意了数据结构: |
| 168 | + |
| 169 | +1. 模板获取接口返回数据结构: |
| 170 | + ```json |
| 171 | + { |
| 172 | + "code": 200, |
| 173 | + "msg": "success", |
| 174 | + "templates": [...] |
| 175 | + } |
| 176 | + ``` |
| 177 | + |
| 178 | +2. 代码生成接口返回数据结构: |
| 179 | + ```json |
| 180 | + { |
| 181 | + "code": 200, |
| 182 | + "msg": "success", |
| 183 | + "outputJson": { |
| 184 | + "tableName": "...", |
| 185 | + "controller": "...", |
| 186 | + "service": "...", |
| 187 | + // 其他模板生成的代码 |
| 188 | + } |
| 189 | + } |
| 190 | + ``` |
| 191 | + |
| 192 | +### 6.3 组件扫描配置 |
| 193 | + |
| 194 | +由于服务实现类位于不同的包层级中,已在 [Application](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/Application.java) 类中配置了组件扫描路径: |
| 195 | + |
| 196 | +```java |
| 197 | +@SpringBootApplication(scanBasePackages = "com.softdev.system.generator") |
| 198 | +``` |
| 199 | + |
| 200 | +确保所有服务实现类都能被正确扫描和注入。 |
| 201 | + |
| 202 | +## 7. 重构优势总结 |
| 203 | + |
| 204 | +1. **结构清晰**:通过合理的包结构和分层设计,使项目结构更加清晰易懂 |
| 205 | +2. **易于维护**:各层职责明确,便于定位和修复问题 |
| 206 | +3. **易于扩展**:采用策略模式等设计模式,便于添加新的功能模块 |
| 207 | +4. **现代化**:遵循Spring Boot和Java的最新最佳实践 |
| 208 | +5. **前后端兼容**:保持与现有前端代码的数据交互格式,无缝升级 |
| 209 | + |
| 210 | +## 8. 后续优化建议 |
| 211 | + |
| 212 | +1. **添加单元测试**:为各层添加完整的单元测试,确保代码质量 |
| 213 | +2. **集成日志系统**:完善日志记录,便于问题排查 |
| 214 | +3. **添加缓存机制**:对模板等不常变化的数据添加缓存,提高性能 |
| 215 | +4. **完善异常处理**:统一异常处理机制,提供更友好的错误提示 |
| 216 | +5. **添加接口文档**:使用Swagger等工具生成接口文档,便于前后端协作 |
| 217 | +6. **增加常量定义**:将硬编码的字符串提取为常量,提高可维护性 |
0 commit comments