我有一个service A
来侦听来自队列的消息,并调用另一个service B
来获取一些值假定为val1 ... x。
假设我的实体是
Entity
|- val1
|- val2
|
... val1n
来自service B
填充的值假定实体中的x
个值。
在服务调用service A
之后,计算一些值并填充实体中的其他字段。
对Entity
[1]使实体不可变,并使实体的每次更新都复制所有值1 ... x以生成新对象。
[2]使实体部分不可变,如声明val1 ... x final和其他非final,所以我可以使用setters
来设置它们的值。
编辑:[3]继续传递Builder对象,当所有值val1 ... n都已填充时,调用build()函数。
EDIT2:[4]有两个独立的对象(私有内部)不可变 - val1 ... x和不可变的valx..n。每次在valx..n上发生一些更新时,我将创建可变对象的新副本并引用不可变对象。
答案 0 :(得分:2)
如果我理解正确你愿意在一个服务中创建对象,填充一些字段,而不是将其传递给另一个服务,并填充其余的服务?在此之后,对象是完整的吗?
如果是这样,我会使用构建器模式,填充builer的字段,一旦完成 - 构建不可变对象
答案 1 :(得分:1)
让service B
返回一个不可变的值对象(让我们称之为ExtendedEntityInformation
),然后使用service A
中的值和该对象来创建不可变的Entity
}。您甚至可以将ExtendedEntityInformation
对象存储在Entity
中,如果需要,可以在Entity
上实施授予ExtendedEntityInformation
中getter的getter。