Использование объекта значения в качестве идентификатора в сущности

Просматривая проект Эванса на примере проекта 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 поддерживает эти правила в отношении себя.

Другие вопросы по тегам