java - 我应该使对象可变吗?

标签 java design-patterns immutability

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

假设我的实体是

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

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

实体建模的可能方法

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

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

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

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

最佳答案

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

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

关于java - 我应该使对象可变吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31381049/

相关文章:

java - 在Python中使用类对象作为其他类函数的参数

java - 使用 LCDS 将不可变的 java 类序列化为 actionscript

algorithm - 一种用可变或不可变状态替换序列中事件的有效技术

java - 带有警报管理器的 Android 上下文

java - 将 long 转换为 double 并返回时值发生变化

java - 删除字符串的最后两个字符

java - 具有泛型的构建器

c# - 私有(private)类数据设计模式很傻?

java - Java 中的不变性和同步

java - URLDecoder 在 UTF-8 url 参数上给出意外值