2

在示例 DDD 项目中查看 Evans 的项目时,我注意到在Cargo实体中,Evans 使用了 tracknumber,它是一个值对象。为什么他没有选择plain string tracknumber,而是选择value object作为身份?这是埃文斯的片段:

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

可以实现的几件事:

  • 封装了Tracking ID不应该为null的逻辑
  • 封装了 Tracking ID 设置后不应更改的逻辑。

使用纯字符串,Cargo 对象必须知道这些规则。使用值对象方法意味着 TrackingId 维护有关自身的这些规则。

于 2011-01-28T20:27:10.747 回答