Files
aidemo-202606/.codebuddy/plans/legacy-ecommerce-demo-repo_99b9a35c.md
2026-06-13 16:53:08 +08:00

8.0 KiB
Raw Blame History

name, overview, todos
name overview todos
legacy-ecommerce-demo-repo 创建一个 Java Spring Boot 电商订单系统的"烂代码"演示仓库涵盖理解老代码、重构、补测试、修Bug、技术栈升级、添加新功能等6大AI辅助场景约12-15个文件适合30-45分钟培训实战。
id content status
create-project-skeleton 创建Maven项目骨架pom.xmlSpring Boot 2.1.18 + H2 + JDBC依赖、application.properties、schema.sql completed
id content status dependencies
create-models 创建数据模型层Order.javajava.util.Date、无Lombok、OrderItem.java、OrderStatus.java枚举 completed
create-project-skeleton
id content status dependencies
create-db-util 创建DbUtil.java工具类硬编码连接串、手动管理Connection、带明显设计缺陷的单例模式 completed
create-project-skeleton
id content status dependencies
create-dao-layer 创建OrderDao.java原始JDBC操作、SQL字符串拼接含SQL注入风险、无连接池、无try-with-resources completed
create-models
create-db-util
id content status dependencies
create-god-service 创建OrderService.java上帝类400+行、static可变计数器并发Bug、3处重复价格计算、200+行长方法createOrder、System.out日志、无异常处理 completed
create-dao-layer
id content status dependencies
create-controller 创建OrderController.java混合校验/业务/DAO调用、无DTO分层、硬编码错误消息、search接口暴露SQL注入 completed
create-god-service
id content status dependencies
create-main-and-readme 创建LegacyOrderApplication.java主启动类以及README.md培训指南含6大场景操作步骤和学员任务说明 completed
create-controller
id content status dependencies
verify-and-test 使用 [subagent:code-explorer] 验证项目结构完整性确认可编译、H2自动建表、5个预埋Bug存在、所有API可访问 completed
create-main-and-readme

用户需求

为一线开发团队制作一个用于AI编码培训的"传统烂代码"演示仓库让学员在培训过程中跟着实操学习如何用AI辅助老旧项目维护。

产品概述

一个刻意设计为"遗留系统"风格的Java Spring Boot电商订单管理后端包含订单创建、查询、取消等基本功能。代码刻意引入典型遗留系统问题上帝类、长函数、重复代码、SQL注入风险、硬编码、无测试、无异常处理等。支持一键启动H2内存数据库学员无需配置环境即可运行。

核心功能

  • 订单CRUD REST API创建、查询、取消、列表
  • H2内存数据库零配置启动
  • 预留6大AI辅助实操场景

六大培训场景设计

  1. 理解老代码+添加注释学员面对无注释、命名混乱的代码用AI快速理解业务逻辑并生成文档
  2. 重构(拆分大函数/消除重复)OrderService中故意放置200+行方法和3处重复的价格计算逻辑
  3. 补单元测试项目零测试覆盖学员用AI为关键路径生成JUnit测试
  4. 修Bug埋典型bug预埋SQL注入、并发竞态、空指针、整型溢出、日期比较错误共5个bug
  5. 技术栈升级从Spring Boot 2.1.x + Java 8 迁移到 Spring Boot 3.x + Java 17或更高
  6. 添加新功能:在烂代码基础上增加订单退款、优惠券等新需求

技术栈选择

  • 语言: Java 8刻意使用旧版本为升级场景留空间
  • 框架: Spring Boot 2.1.18.RELEASE
  • 构建工具: Maven 3.6+
  • 数据库: H2内存模式零配置
  • 数据访问: 原始JDBC + 手动连接管理不使用任何ORM
  • 依赖: spring-boot-starter-web, h2, spring-boot-starter-jdbc

实现方案

整体策略

创建一个刻意劣化的Spring Boot应用每个文件都包含典型遗留代码特征。关键设计原则

  • 不用ORM直接JDBC操作手动管理连接SQL字符串拼接
  • 不分层Controller直接调用DAOService是上帝类
  • 不写测试:整个项目零测试文件
  • 不用现代APIjava.util.Date、旧式for循环、避免Stream/Lambda
  • 全局状态使用static可变字段管理订单号序列

遗留代码特征清单

特征 体现位置 培训价值
上帝类 OrderService.java (400+行) 演示AI拆分大类的过程
长方法 createOrder() 200+行 演示AI提取方法
重复代码 价格计算在3处重复 演示AI消除重复
SQL拼接 OrderDao.java 演示AI发现安全漏洞
硬编码 税率0.17、连接串 演示AI提取配置
无日志 全部System.out 演示AI添加日志框架
无异常处理 整个项目 演示AI添加异常处理
静态可变状态 orderNumberSequence 演示AI发现并发问题

预埋Bug清单

  1. SQL注入OrderDao.getOrderByName()使用字符串拼接用户输入
  2. 并发竞态OrderService中static int orderNumberSequence++无同步
  3. 空指针异常computeTotalPrice()未检查OrderItem列表是否为空
  4. 整型溢出:折扣计算 int discount = price * discountPercent / 100price可为大值
  5. 日期比较错误使用java.util.Date的before/after而非推荐方式跨年场景有边界问题

项目结构

legacy-order-system/
├── pom.xml                          # [NEW] Maven配置Spring Boot 2.1.18 + H2
├── README.md                        # [NEW] 培训指南含6大场景操作说明
└── src/main/
    ├── java/com/legacy/order/
    │   ├── LegacyOrderApplication.java    # [NEW] 主启动类,无任何配置分离
    │   ├── controller/
    │   │   └── OrderController.java       # [NEW] REST控制器600+行混合了校验、业务、DAO调用
    │   ├── service/
    │   │   └── OrderService.java          # [NEW] 上帝类400+行,包含所有业务逻辑
    │   ├── dao/
    │   │   └── OrderDao.java              # [NEW] 原始JDBC操作SQL拼接连接手动管理
    │   ├── model/
    │   │   ├── Order.java                 # [NEW] 订单实体java.util.Date无Lombok
    │   │   ├── OrderItem.java             # [NEW] 订单项实体
    │   │   └── OrderStatus.java           # [NEW] 订单状态枚举
    │   └── util/
    │       └── DbUtil.java                # [NEW] 硬编码连接工具类,单例模式
    └── resources/
        ├── application.properties         # [NEW] 最小化配置H2内存库
        └── schema.sql                     # [NEW] 建表DDL自动执行

数据流架构

graph LR
    A[HTTP Request] --> B[OrderController]
    B --> C[OrderService<br/>上帝类/全局状态]
    C --> D[OrderDao<br/>原始JDBC/SQL拼接]
    D --> E[H2内存数据库]
    C -.-> F[DbUtil<br/>硬编码连接]
    F -.-> E

API设计

方法 路径 说明
POST /api/orders 创建订单
GET /api/orders/{id} 查询单个订单
GET /api/orders 列出所有订单
PUT /api/orders/{id}/cancel 取消订单
GET /api/orders/search?name=xxx 按商品名搜索含SQL注入风险

实现注意事项

  • 性能H2内存库保证启动速度(<2秒),学员无需安装任何外部依赖
  • 可移植性纯Maven项目克隆后mvn spring-boot:run即可启动
  • 日志刻意使用System.out.println模拟旧项目无日志框架的情况
  • 编码规范刻意使用坏命名如tmp、data、list、flag等、魔法数字、无注释
  • 向后兼容使用Java 8语法避免模块化系统兼容JDK 8-17

使用的扩展

SubAgent

  • code-explorer
  • 用途:验证生成的仓库文件结构完整性和代码一致性
  • 预期结果确认所有文件存在、包引用正确、Maven配置有效