Использование объекта value в качестве идентификатора в сущности
Просматривая проект Эванса на примере проекта DDD, я замечаю, что в сущности Cargo
Эванс использует tracknumber, который является объектом value. Почему он не выбирает простой 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 означает, что TrackingId поддерживает эти правила о себе.