Использование объекта значения в качестве идентификатора в сущности
Просматривая проект Эванса на примере проекта DDD, я заметил, что в Cargo
сущность, Эванс использует tracknumber, который является объектом значения. Почему он не выбирает равнину string tracknumber
вместо этого выбирает объект значения для идентичности? Вот фрагмент из Эванса:
public class Cargo implements Entity<Cargo> {
private TrackingId trackingId
}
public final class TrackingId implements ValueObject<TrackingId> {
private String id;
/**
* Constructor.
*
* @param id Id string.
*/
public TrackingId(final String id) {
Validate.notNull(id);
this.id = id;
}
1 ответ
Решение
Пара вещей, которых можно достичь:
- Инкапсулирует логику, что идентификатор отслеживания не должен быть нулевым
- Инкапсулирует логику, что идентификатор отслеживания не должен изменяться после установки.
С простой строкой объект Cargo должен был бы знать об этих правилах. Использование подхода Value Object означает, что TrackingId поддерживает эти правила в отношении себя.