重构手法——函数行为重塑类 | 语意 | 返回修改后的值

64 阅读1分钟

简介

"返回修改后的值"是提升代码可预测性的重要重构手法。通过将操作结果显式返回而不是直接修改参数,可以减少副作用,增强代码的可维护性和可测试性。

针对的症状(代码坏味道)

  • 方法通过参数传递隐式修改状态
  • 存在不明显的参数修改副作用
  • 需要支持链式调用操作
  • 方法执行结果不明确

返回修改后的值的详细步骤

  1. 识别副作用方法
    • 查找修改参数的方法
    • 标记隐式状态变更点
  2. 重构返回值
    • 将void改为结果类型
    • 返回修改后的新对象
  3. 调整调用方
    • 用返回值替换参数修改
    • 保持业务逻辑不变
  4. 清理参数修改
    • 移除参数的可变操作
    • 保持参数不可变性

示例

重构前代码:

class Calculator {
    void increment(int[] value) {
        value[0]++;
    }
}

重构后代码:

class Calculator {
    int increment(int value) {
        return value + 1;
    }
}

// 调用方
int result = calculator.increment(5);

练习

基础练习题

  1. 简单返回值重构

    // 重构前
    class StringProcessor {
        void appendSpace(StringBuilder sb) {
            sb.append(" ");
        }
    }
    

进阶练习题

  1. 复合对象重构

    // 重构前
    class OrderManager {
        void applyDiscount(Order order) {
            order.setAmount(order.getAmount() * 0.9);
        }
    }
    

综合拓展练习题

  1. 链式操作重构

    // 重构前
    class TextEditor {
        void bold(Text text) {
            text.setContent("<b>" + text.getContent() + "</b>");
        }
    }
    

代码审查要点

  1. 优点:

    • 消除隐式副作用
    • 支持不可变数据结构
    • 提高代码可测试性
  2. 潜在问题:

    • 注意对象创建成本
    • 保持方法原子性
    • 处理大对象性能影响