首页/开发/代码质量与评审速查/坏味道:依恋情结(Feature Envy)
重构手法62 条

坏味道:依恋情结(Feature Envy)

函数频繁访问另一个对象的内部数据:说明职责放错了地方,用 Move Function 搬过去;数据与行为同处一个模块,边界才清晰。

信号函数里别的对象前缀出现次数超过自身
手法Move Function(移动后删除原方法)
例外策略/访问者模式中有意为之的分离

移动前

移动前
double total(Purchase p) {
    return p.items().stream()...
}

移动后

移动后
class Purchase {
    double total() {
        return items.stream()...
    }
}

易错点

  • 机械地按访问计数搬方法:忽略领域语义,产生贫血模型
  • 移动后保留委托转发又不标注:调用链变长且难追

数据来源与参考

  • 《重构》第 2 版 · 第 3 章(Feature Envy)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌