🎯 今日核心问题

  1. 什么样的代码适合让 AI 重构?什么样的不适合?
  2. AI 重构和手工重构有什么本质区别?

📖 精读提纲

【一】核心概念

重构 = 在不改变外部行为的前提下改善内部结构。这是后端开发的核心工程素养之一。AI 的优势是:它见过无数代码模式,能快速识别坏味道并给出更优雅的替代方案,把你从"我知道这段代码不好但不知道怎么改"的困境中解脱出来。

【二】关键原理

AI 重构的 5 个维度:

  1. 命名优化:变量名、方法名更表达业务意图
  2. 抽取方法:把长方法拆成职责单一的小方法
  3. 消除重复:发现并提取公共逻辑
  4. 设计模式:用策略、工厂、模板方法替换 if-else 地狱
  5. 异常处理:统一异常链路,去掉 catch 住就吞掉的坏习惯

【三】实战应用(Java/Spring Boot)

Before:Controller 肥胖症

@PostMapping("/order")
public Result createOrder(@RequestBody OrderDTO dto) {
    // 参数校验
    if (dto.getUserId() == null) return Result.fail("userId不能为空");
    if (dto.getAmount() <= 0) return Result.fail("金额必须大于0");
    // 查用户
    User user = userMapper.selectById(dto.getUserId());
    if (user == null) return Result.fail("用户不存在");
    // 创建订单
    Order order = new Order();
    order.setUserId(dto.getUserId());
    order.setAmount(dto.getAmount());
    order.setStatus("PENDING");
    order.setCreateTime(LocalDateTime.now());
    orderMapper.insert(order);
    return Result.ok(order.getId());
}

让 AI 重构的 Prompt:"这是一个 Spring Boot 下单接口,请按照三层架构(Controller 只做参数校验和调用 Service,Service 处理业务逻辑)重构,保持功能不变。"

After:瘦身后的 Controller

@PostMapping("/order")
public Result createOrder(@Valid @RequestBody OrderDTO dto) {
    Long orderId = orderService.createOrder(dto);
    return Result.ok(orderId);
}

消除 if-else 嵌套示例:用策略模式

告诉 AI:"这段根据支付类型走不同逻辑的 if-else,请用策略模式重构,后续新增支付方式只需新增一个类。"

【四】常见误区


💡 今日金句

好代码不是写出来的,是重构出来的。AI 让重构的成本降低了 10 倍。

✏️ 今日练习

找一段你写过的"能跑但难看"的 Java 方法(比如一个超过 50 行的 Service 方法,或者有超过 3 层 if-else 嵌套的代码),把它贴给 ChatGPT 或 Claude,加上这句话:

"请帮我重构这段代码,保持功能不变,目标是:1)减少方法长度 2)消除嵌套 3)让命名更表达业务含义。重构后请说明每一处改动的理由。"

对比前后差异,思考哪里还能继续改进。

🔖 明日预告

明天是本章综合演练日:5 个真实的 Java 后端 AI 使用场景,每个都可以立即动手。