mirror of
https://github.com/moshowgame/SpringBootCodeGenerator.git
synced 2025-12-25 21:36:47 +08:00
217 lines
12 KiB
Markdown
217 lines
12 KiB
Markdown
# 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. **增加常量定义**:将硬编码的字符串提取为常量,提高可维护性 |