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