Использование объекта 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 2

1 ответ:

Пара вещей, которые могли бы достичь:

  • инкапсулирует логику, что идентификатор отслеживания не должен быть нулевым
  • инкапсулирует логику, что идентификатор отслеживания не должен изменяться после установки.

С простой строкой объект Cargo должен был бы знать эти правила. Использование подхода объекта Value означает, что TrackingId поддерживает эти правила о себе.