我应该使对象可变吗?

Should I make the object mutable?

我有一个 service A,它侦听来自队列的消息并调用另一个 service B 来获取一些值假设 val1...x。

假设我的实体是

Entity
|- val1
|- val2
|
... val1n

两个 service B 填充的值假定实体中的 x 值。 在服务调用之后 service A 计算一些值并填充实体中的其他字段。

Entity

建模的可能方法

[1] 使实体不可变并使实体的每次更新都复制所有值 1...x 以创建新对象。

[2] 使实体部分不可变,例如声明 val1...x final 和其他非最终的,因此我可以使用 setters 来设置它们的值。

编辑:[3] 继续传递 Builder 对象,当所有值 val1...n 都已填充时调用 build() 函数。

EDIT2 : [4] 有两个不可变的独立对象(私有内部)- val1...x 和不可变的 valx..n。每次在 valx..n 上发生一些更新时,我都会创建可变对象的新副本并引用不可变对象。

如果我理解正确的话,您愿意在一项服务中创建对象,填充一些字段,而不是将其传递给另一项服务,然后填充其余部分吗?这样之后对象就完成了?

如果是这样,我会使用 Builder 模式,填充构建器的字段,一旦完成 - 构建不可变对象

service B return 设为不可变值对象(我们称之为 ExtendedEntityInformation),然后使用 service A 中的值和该对象来创建不可变 Entity。您甚至可以将 ExtendedEntityInformation 对象存储在您的 Entity 中,如果需要,在 Entity 上实现 getter,委托给 ExtendedEntityInformation 中的 getter。