Неизменные: мы должны использовать интерфейс или ImmutableValueObject
Вопрос в том, как использовать библиотеку java immutables.
В своей документации они, кажется, используют ImmutableValueObject
только для создания экземпляра, а затем в коде они используют 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
и передать изменяемый экземпляр).
Часто я хочу использовать интерфейс, потому что я могу просто использовать другую реализацию в своих тестах. Но в случае неизменяемого объекта (который является просто объектом данных) мне это не нужно: в тесте я просто подготавливаю свой объект таким, каким он должен быть.
Есть ли другие причины, по которым я скучаю?