2

サンプル DDD プロジェクトで Evans のプロジェクトを表示しているときに、Cargoエンティティで、Evans が値オブジェクトである tracknumber を使用していることに気付きました。彼がプレーンstring tracknumberを選択せず​​、ID に値オブジェクトを選択したのはなぜですか? エヴァンスのスニペットは次のとおりです。

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;
  }
4

1 に答える 1

2

達成するいくつかのこと:

  • トラッキング ID が null であってはならないというロジックをカプセル化します
  • 一度設定するとトラッキング ID を変更してはならないというロジックをカプセル化します。

プレーンな文字列の場合、Cargo オブジェクトはこれらのルールを認識している必要があります。値オブジェクト アプローチを使用することは、TrackingId がそれ自体に関するこれらのルールを維持することを意味します。

于 2011-01-28T20:27:10.747 に答える