代码异味(Code Smell)识别与重构指南

1、引言:什么是“代码异味”?

在软件开发中,“代码异味(Code Smell)”是指那些虽然不会导致程序编译失败或运行错误,但暗示着潜在设计缺陷或可维护性问题的代码结构。它们是代码演进过程中的“信号灯”,提示我们某段代码可能需要优化。

1.1 ✅ 为什么关注代码异味?

  • 预示潜在风险:可能是未来 bug 的温床
  • 阻碍重构:让代码难以理解、测试和修改
  • 影响协作效率:阅读成本高,新人上手难
  • 降低系统稳定性:频繁修改易引入错误

1.2 🧩 代码异味 ≠ Bug

特征 异味 Bug
是否编译通过 否(可能)
是否运行正确
是否需要修复? 建议尽早重构 必须修复

2、常见的代码异味类型及其危害

本节将介绍 10 种典型的代码异味,并提供丰富代码示例说明其特征及重构建议。

2.1. 长函数(Long Method)

🔍 特征:

  • 方法体超过 50 行
  • 包含多个职责逻辑
  • 条件判断嵌套深

🧨 危害:

  • 可读性差
  • 测试困难
  • 修改容易引入副作用

💡 示例:

public void processOrder(Order order) {
   
    if (order == null) throw new IllegalArgumentException();
    if (order.getItems().isEmpty()) return;

    double total = 0;
    for (Item item : order.getItems()) {
   
        if (item.getQuantity() > 10) {
   
            total += item.getPrice() * item.getQuantity() * 0.9;
        } else {
   
            total += item.getPrice() * item.getQuantity();
        }
    }

    if (order.getCoupon() != null) {
   
        total *= order.getCoupon().getDiscountRate();
    }

    order.setTotal(total);
    order.setStatus("PAID");
    orderRepository.save(order);
}

✅ 重构建议:

  • 提取子方法,按职责拆分逻辑
  • 使用命名清晰的方法名表达意图
private double calculateSubtotal(Order order) {
   
    return order.getItems().stream()
        .mapToDouble(this::calculateItemPrice)
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随风九天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值