重构手法——对象结构优化类 | 改进构造器 | 上移字段

61 阅读2分钟

简介

"上移字段"(Pull Up Field)重构手法用于消除子类中的重复字段定义。当多个子类包含相同含义和类型的字段时,将这些字段提升到父类可以集中管理数据存储。

典型代码坏味道

  • 多个子类中存在相同名称和类型的字段
  • 重复的字段访问方法
  • 子类间字段校验逻辑重复

重构步骤

  1. 识别重复字段

    • 找到多个子类中的相同字段定义
    • 确认字段的业务含义完全一致
    • 检查字段初始化方式的差异
  2. 在父类中声明字段

    • 将字段声明移至父类
    • 调整访问修饰符(通常为protected)
    • 保持子类现有构造函数不变
  3. 移除子类字段

    • 删除子类中的重复字段声明
    • 修改子类中直接访问字段的代码
    • 保持子类特有的字段不变
  4. 验证与测试

    • 检查序列化/反序列化影响
    • 验证反射操作的兼容性
    • 确保数据库映射正确性

示例

重构前:

class Engineer extends Employee {
    protected String department;
    // 其他字段和方法...
}

class Manager extends Employee {
    protected String department;
    // 其他字段和方法...
}

重构后:

abstract class Employee {
    protected String department;
    // 公共字段和方法...
}

class Engineer extends Employee {
    // 特有字段和方法...
}

class Manager extends Employee {
    // 特有字段和方法...
}

专项练习

基础练习

  1. 重构车辆类继承体系

    class Car extends Vehicle {
        private String licensePlate;
    }
    
    class Truck extends Vehicle {
        private String licensePlate;
    }
    

进阶练习

  1. 跨层级字段重构

    class SavingsAccount extends Account {
        protected BigDecimal interestRate;
    }
    
    class CheckingAccount extends Account {
        protected BigDecimal interestRate;
    }
    

代码审查清单

优势验证

  • 子类字段重复率降低80%以上
  • 字段修改只需在父类进行
  • 统一字段校验逻辑

风险提示

  • 可能破坏子类序列化版本
  • 多继承场景下的字段冲突
  • 需要同步修改数据库映射