Skip to content

Conversation

@moshowgame
Copy link
Owner

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:

    • 处理页面跳转请求
    • 返回视图页面
  2. CodeGenController:

    • 提供代码生成相关REST API
    • 处理代码生成请求
  3. TemplateController:

    • 提供模板管理相关REST API
    • 处理模板获取请求

4.2 服务层 (Service)

服务层采用接口与实现分离的设计,便于测试和扩展:

  1. 接口层:

    • CodeGenService: 核心代码生成服务接口
    • TemplateService: 模板管理服务接口
    • SqlParserService: SQL解析服务接口
    • JsonParserService: JSON解析服务接口
  2. 实现层:

    • CodeGenServiceImpl: 核心代码生成服务实现
    • TemplateServiceImpl: 模板管理服务实现
    • SqlParserServiceImpl: SQL解析服务实现
    • JsonParserServiceImpl: JSON解析服务实现

4.3 实体层 (Entity)

实体层按照用途分类,避免不同类型对象混用:

  1. DTO (Data Transfer Object):

    • ParamInfo: 参数信息传输对象
    • ClassInfo: 类信息传输对象
    • FieldInfo: 字段信息传输对象
  2. VO (View Object):

    • ResultVo: 统一返回结果视图对象
  3. Enums:

    • ParserTypeEnum: 解析类型枚举

4.4 工具层 (Util)

工具层包含各种通用工具类和自定义异常:

  1. 工具类:

    • FreemarkerUtil: Freemarker模板处理工具
    • StringUtilsPlus: 字符串处理工具
    • MapUtil: Map操作工具
    • mysqlJavaTypeUtil: MySQL与Java类型映射工具
  2. 异常类:

    • CodeGenException: 代码生成自定义业务异常
    • SqlParseException: SQL解析异常

5. 关键设计模式应用

5.1 策略模式

在SQL解析功能中应用策略模式,将不同的解析方式封装成独立的策略类:

  1. SqlParserServiceImpl中实现了多种SQL解析方法:

    • processTableIntoClassInfo: 默认SQL解析
    • generateSelectSqlBySQLPraser: SELECT SQL解析
    • generateCreateSqlBySQLPraser: CREATE SQL解析
    • processTableToClassInfoByRegex: 正则表达式解析
    • processInsertSqlToClassInfo: INSERT SQL解析
  2. JsonParserServiceImpl中实现了JSON解析:

    • processJsonToClassInfo: JSON解析

通过策略模式,可以:

  • 避免大量的if-else判断
  • 便于添加新的解析策略
  • 提高代码的可维护性

5.2 接口与实现分离

所有服务层都采用接口与实现分离的设计,便于:

  • 单元测试模拟
  • 多种实现方式切换
  • 降低模块间耦合度

6. 重要技术实现细节

6.1 统一响应格式

所有控制器方法均返回 ResultVo 统一响应对象,保持与前端的兼容性:

// 成功响应
ResultVo.ok(data)

// 错误响应
ResultVo.error(message)

6.2 前后端兼容性处理

为了保持与现有前端JavaScript代码的兼容性,在处理响应数据时特别注意了数据结构:

  1. 模板获取接口返回数据结构:

    {
      "code": 200,
      "msg": "success",
      "templates": [...]
    }
  2. 代码生成接口返回数据结构:

    {
      "code": 200,
      "msg": "success",
      "outputJson": {
        "tableName": "...",
        "controller": "...",
        "service": "...",
        // 其他模板生成的代码
      }
    }

6.3 组件扫描配置

由于服务实现类位于不同的包层级中,已在 Application 类中配置了组件扫描路径:

@SpringBootApplication(scanBasePackages = "com.softdev.system.generator")

确保所有服务实现类都能被正确扫描和注入。

7. 重构优势总结

  1. 结构清晰:通过合理的包结构和分层设计,使项目结构更加清晰易懂
  2. 易于维护:各层职责明确,便于定位和修复问题
  3. 易于扩展:采用策略模式等设计模式,便于添加新的功能模块
  4. 现代化:遵循Spring Boot和Java的最新最佳实践
  5. 前后端兼容:保持与现有前端代码的数据交互格式,无缝升级

8. 后续优化建议

  1. 添加单元测试:为各层添加完整的单元测试,确保代码质量
  2. 集成日志系统:完善日志记录,便于问题排查
  3. 添加缓存机制:对模板等不常变化的数据添加缓存,提高性能
  4. 完善异常处理:统一异常处理机制,提供更友好的错误提示
  5. 添加接口文档:使用Swagger等工具生成接口文档,便于前后端协作
  6. 增加常量定义:将硬编码的字符串提取为常量,提高可维护性

@moshowgame moshowgame merged commit 07cd5c4 into master Dec 6, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants