更改对值的引用
问题
您有一个引用对象,它太小且很少更改,因此无法管理它的生命周期。
解决方案
将其转换为值对象。
之前

后

为什么重构
从引用转换到值的灵感可能来自于使用引用的不方便。推荐信需要你的管理:
它们总是要求从存储器中请求必要的对象。
内存中的引用可能不方便使用。
与值相比,在分布式和并行系统上使用引用尤其困难。
如果您希望拥有不可更改的对象,而不是状态可能在其生命周期内发生变化的对象,值就特别有用。
好处
对象的一个重要属性是它们应该是不可更改的。每个返回对象值的查询都应该收到相同的结果。如果这是正确的,那么即使有许多对象表示同一事物也不会出现问题。
值更容易实现。
缺点
- 如果一个值是可更改的,请确保在任何对象更改时,表示同一实体的所有其他对象中的值都已更新。这太麻烦了,因此更容易为此目的创建引用。
如何重构
使对象不可改变。对象不应该有任何改变其状态和数据的setter或其他方法(移除设置方法可能会有帮助)。应该将数据分配给值对象的字段的唯一位置是构造函数。
创建一个比较方法来比较两个值。
检查是否可以删除工厂方法并使对象构造函数为公共。