圣诞大减价开始了!

更改对值的引用

问题

您有一个引用对象,它太小且很少更改,因此无法管理它的生命周期。

解决方案

将其转换为值对象。

之前
更改引用值-之前
更改引用值-之后

为什么重构

从引用转换到值的灵感可能来自于使用引用的不方便。推荐信需要你的管理:

  • 它们总是要求从存储器中请求必要的对象。

  • 内存中的引用可能不方便使用。

  • 与值相比,在分布式和并行系统上使用引用尤其困难。

如果您希望拥有不可更改的对象,而不是状态可能在其生命周期内发生变化的对象,值就特别有用。

好处

  • 对象的一个重要属性是它们应该是不可更改的。每个返回对象值的查询都应该收到相同的结果。如果这是正确的,那么即使有许多对象表示同一事物也不会出现问题。

  • 值更容易实现。

缺点

  • 如果一个值是可更改的,请确保在任何对象更改时,表示同一实体的所有其他对象中的值都已更新。这太麻烦了,因此更容易为此目的创建引用。

如何重构

  1. 使对象不可改变。对象不应该有任何改变其状态和数据的setter或其他方法(移除设置方法可能会有帮助)。应该将数据分配给值对象的字段的唯一位置是构造函数。

  2. 创建一个比较方法来比较两个值。

  3. 检查是否可以删除工厂方法并使对象构造函数为公共。

Baidu
map