问题是关于使用不可变Java 库。
在他们的文档中,他们似乎使用ImmutableValueObject
only 来构造实例,然后在他们使用ValueObject
(接口或抽象基类)的代码中,如下所示:
ValueObject valueObject =
ImmutableValueObject.builder()
.name("My value")
.addCounts(1)
.addCounts(2)
.build();
总是只使用 不是更好ImmutableValueObject
吗?
例如:
ImmutableValueObject valueObject =
ImmutableValueObject.builder()
.name("My value")
.addCounts(1)
.addCounts(2)
.build();
特别是对于方法参数等,ValueObject
不保证不变性(例如,有人可以只是子类化ValueObject
并传递一个可变实例)。
通常,我想使用接口,因为我可以在测试中简单地使用不同的实现。但是对于不可变对象(它只是一个数据对象),我不需要这个:在测试中我只是按照它应该的方式准备我的对象。
还有其他原因,我失踪了吗?