重构手法——对象结构优化类 | 类关系解耦 | 删除setter方法

56 阅读1分钟

简介

"删除设置方法"(Remove Setting Method)重构手法用于保护对象的不变性。当某个字段在初始化后不应被修改时,应该移除其公开的赋值方法,强制通过构造函数进行初始化。

典型代码坏味道

  • 存在公开的字段设置方法
  • 字段在生命周期内不应改变
  • 字段仅在构造函数中初始化
  • 存在不安全的可变状态

重构步骤

  1. 识别可变字段

    • 找到具有公开setter的字段
    • 分析字段修改场景
    • 确认字段的不可变需求
  2. 限制字段修改

    • 将setter方法改为private
    • 或直接删除setter方法
    • 添加final修饰符
  3. 调整初始化

    • 在构造函数中完成赋值
    • 使用工厂方法控制创建
    • 处理子类初始化需求
  4. 验证与测试

    • 检查所有赋值路径
    • 验证序列化/反序列化
    • 确保线程安全性

示例

重构前:

class BankAccount {
    private String accountNumber;

    public void setAccountNumber(String number) {
        this.accountNumber = number;
    }
}

重构后:

class BankAccount {
    private final String accountNumber;

    public BankAccount(String number) {
        this.accountNumber = number;
    }
}

专项练习

基础练习

  1. 重构用户身份类

    class User {
        private String id;
    
        public void setId(String id) {
            this.id = id;
        }
    }
    

进阶练习

  1. 处理集合字段

    class Catalog {
        private List<Product> products = new ArrayList<>();
    
        public void setProducts(List<Product> products) {
            this.products = products;
        }
    }
    

代码审查清单

优势验证

  • 对象不变性提升100%
  • 消除意外状态变更
  • 增强线程安全性

风险提示

  • 需要修改对象创建方式
  • 可能影响反射操作
  • 需要处理继承体系中的final字段