首页/开发/代码质量与评审速查/手法:Change Reference to Value / Change Value to Reference(值引用互换)
重构手法62 条

手法:Change Reference to Value / Change Value to Reference(值引用互换)

按相等性语义选择对象模型:值对象按内容相等(钱、坐标),引用对象共享实例(客户、账户);模型选错的典型症状是相等判断与更新语义别扭。

值对象不可变、按结构相等、可自由拷贝
引用对象共享实例、按标识相等、更新全局可见
判断该对象是否代表一个可辨识实体

示意

示意
值:Money.of("CNY", 10.00) == Money.of("CNY", 10.00)
引用:customerA == customerRepository.find(id)

易错点

  • 值对象实现可变:缓存与前缀共享出现脏数据
  • 引用对象到处拷贝实例:同一实体出现多个副本

数据来源与参考

  • 《重构》第 2 版 · 第 9 章、第 11 章(Change Value to Reference / Change Reference to Value)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌