# Spring Boot代码生成器项目重构说明文档 ## 1. 重构概述 本项目旨在对Spring Boot代码生成器进行现代化重构,使其具有更清晰的架构、更好的可维护性和更强的扩展性。重构遵循现代Spring Boot应用的最佳实践,采用了分层架构设计和多种设计模式。 ## 2. 重构目标 1. **清晰的分层架构**:明确Controller、Service、DTO、VO等各层职责 2. **良好的可扩展性**:通过策略模式处理不同类型的SQL解析 3. **现代化开发规范**:遵循Spring Boot和Java开发最佳实践 4. **易于维护**:通过合理的包结构和命名规范提高代码可读性 5. **前后端兼容性**:保持与现有前端代码的数据交互格式 ## 3. 重构后项目结构 ``` com.softdev.system.generator ├── GeneratorApplication.java # 启动类 ├── config # 配置类包 │ ├── WebMvcConfig.java # MVC配置 │ └── GlobalExceptionHandler.java # 全局异常处理器 ├── controller # 控制层 │ ├── PageController.java # 页面跳转控制器 │ ├── CodeGenController.java # 代码生成相关接口 │ └── TemplateController.java # 模板相关接口 ├── service # 服务层接口 │ ├── CodeGenService.java # 代码生成服务接口 │ ├── TemplateService.java # 模板服务接口 │ └── parser │ ├── SqlParserService.java # SQL解析服务接口 │ └── JsonParserService.java # JSON解析服务接口 ├── service.impl # 服务实现层 │ ├── CodeGenServiceImpl.java # 代码生成服务实现 │ ├── TemplateServiceImpl.java # 模板服务实现 │ └── parser │ ├── SqlParserServiceImpl.java # SQL解析服务实现 │ └── JsonParserServiceImpl.java # JSON解析服务实现 ├── entity # 实体类 │ ├── dto │ │ ├── ParamInfo.java # 参数信息DTO │ │ ├── ClassInfo.java # 类信息DTO │ │ └── FieldInfo.java # 字段信息DTO │ ├── vo │ │ └── ResultVo.java # 统一返回结果VO │ └── enums │ └── ParserTypeEnum.java # 解析类型枚举 ├── util # 工具类包 │ ├── FreemarkerUtil.java # Freemarker工具类 │ ├── StringUtilsPlus.java # 字符串工具类 │ ├── MapUtil.java # Map工具类 │ ├── mysqlJavaTypeUtil.java # MySQL类型转换工具类 │ └── exception │ ├── CodeGenException.java # 自定义业务异常 │ └── SqlParseException.java # SQL解析异常 └── constant # 常量定义 └── CodeGenConstants.java # 代码生成常量(待实现) ``` ## 4. 各层详细说明 ### 4.1 控制层 (Controller) 控制层负责处理HTTP请求,协调业务逻辑并返回结果: 1. **[PageController](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/controller/PageController.java)**: - 处理页面跳转请求 - 返回视图页面 2. **[CodeGenController](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/controller/CodeGenController.java)**: - 提供代码生成相关REST API - 处理代码生成请求 3. **[TemplateController](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/controller/TemplateController.java)**: - 提供模板管理相关REST API - 处理模板获取请求 ### 4.2 服务层 (Service) 服务层采用接口与实现分离的设计,便于测试和扩展: 1. **接口层**: - [CodeGenService](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/CodeGenService.java): 核心代码生成服务接口 - [TemplateService](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/TemplateService.java): 模板管理服务接口 - [SqlParserService](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/parser/SqlParserService.java): SQL解析服务接口 - [JsonParserService](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/parser/JsonParserService.java): JSON解析服务接口 2. **实现层**: - [CodeGenServiceImpl](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/impl/CodeGenServiceImpl.java): 核心代码生成服务实现 - [TemplateServiceImpl](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/impl/TemplateServiceImpl.java): 模板管理服务实现 - [SqlParserServiceImpl](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/impl/parser/SqlParserServiceImpl.java): SQL解析服务实现 - [JsonParserServiceImpl](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/impl/parser/JsonParserServiceImpl.java): JSON解析服务实现 ### 4.3 实体层 (Entity) 实体层按照用途分类,避免不同类型对象混用: 1. **DTO (Data Transfer Object)**: - [ParamInfo](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/entity/dto/ParamInfo.java): 参数信息传输对象 - [ClassInfo](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/entity/dto/ClassInfo.java): 类信息传输对象 - [FieldInfo](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/entity/dto/FieldInfo.java): 字段信息传输对象 2. **VO (View Object)**: - [ResultVo](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/entity/vo/ResultVo.java): 统一返回结果视图对象 3. **Enums**: - [ParserTypeEnum](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/entity/enums/ParserTypeEnum.java): 解析类型枚举 ### 4.4 工具层 (Util) 工具层包含各种通用工具类和自定义异常: 1. **工具类**: - [FreemarkerUtil](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/util/FreemarkerUtil.java): Freemarker模板处理工具 - [StringUtilsPlus](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/util/StringUtilsPlus.java): 字符串处理工具 - [MapUtil](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/util/MapUtil.java): Map操作工具 - [mysqlJavaTypeUtil](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/util/mysqlJavaTypeUtil.java): MySQL与Java类型映射工具 2. **异常类**: - [CodeGenException](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/util/exception/CodeGenException.java): 代码生成自定义业务异常 - [SqlParseException](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/util/exception/SqlParseException.java): SQL解析异常 ## 5. 关键设计模式应用 ### 5.1 策略模式 在SQL解析功能中应用策略模式,将不同的解析方式封装成独立的策略类: 1. [SqlParserServiceImpl](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/impl/parser/SqlParserServiceImpl.java)中实现了多种SQL解析方法: - `processTableIntoClassInfo`: 默认SQL解析 - `generateSelectSqlBySQLPraser`: SELECT SQL解析 - `generateCreateSqlBySQLPraser`: CREATE SQL解析 - `processTableToClassInfoByRegex`: 正则表达式解析 - `processInsertSqlToClassInfo`: INSERT SQL解析 2. [JsonParserServiceImpl](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/service/impl/parser/JsonParserServiceImpl.java)中实现了JSON解析: - `processJsonToClassInfo`: JSON解析 通过策略模式,可以: - 避免大量的if-else判断 - 便于添加新的解析策略 - 提高代码的可维护性 ### 5.2 接口与实现分离 所有服务层都采用接口与实现分离的设计,便于: - 单元测试模拟 - 多种实现方式切换 - 降低模块间耦合度 ## 6. 重要技术实现细节 ### 6.1 统一响应格式 所有控制器方法均返回 [ResultVo](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/entity/vo/ResultVo.java) 统一响应对象,保持与前端的兼容性: ```java // 成功响应 ResultVo.ok(data) // 错误响应 ResultVo.error(message) ``` ### 6.2 前后端兼容性处理 为了保持与现有前端JavaScript代码的兼容性,在处理响应数据时特别注意了数据结构: 1. 模板获取接口返回数据结构: ```json { "code": 200, "msg": "success", "templates": [...] } ``` 2. 代码生成接口返回数据结构: ```json { "code": 200, "msg": "success", "outputJson": { "tableName": "...", "controller": "...", "service": "...", // 其他模板生成的代码 } } ``` ### 6.3 组件扫描配置 由于服务实现类位于不同的包层级中,已在 [Application](file:///D:/Workspace/Project/SpringBootCodeGenerator/generator-web/src/main/java/com/softdev/system/generator/Application.java) 类中配置了组件扫描路径: ```java @SpringBootApplication(scanBasePackages = "com.softdev.system.generator") ``` 确保所有服务实现类都能被正确扫描和注入。 ## 7. 重构优势总结 1. **结构清晰**:通过合理的包结构和分层设计,使项目结构更加清晰易懂 2. **易于维护**:各层职责明确,便于定位和修复问题 3. **易于扩展**:采用策略模式等设计模式,便于添加新的功能模块 4. **现代化**:遵循Spring Boot和Java的最新最佳实践 5. **前后端兼容**:保持与现有前端代码的数据交互格式,无缝升级 ## 8. 后续优化建议 1. **添加单元测试**:为各层添加完整的单元测试,确保代码质量 2. **集成日志系统**:完善日志记录,便于问题排查 3. **添加缓存机制**:对模板等不常变化的数据添加缓存,提高性能 4. **完善异常处理**:统一异常处理机制,提供更友好的错误提示 5. **添加接口文档**:使用Swagger等工具生成接口文档,便于前后端协作 6. **增加常量定义**:将硬编码的字符串提取为常量,提高可维护性