Использование объекта значения в качестве идентификатора в сущности - PullRequest
2 голосов
/ 28 января 2011

При просмотре проекта Эванса на примере проекта 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 Ответ

2 голосов
/ 28 января 2011

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

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

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

...