使用值对象作为实体中的标识符

时间:2011-01-28 19:11:45

标签: entity domain-driven-design value-objects

在查看样本DDD项目的Evans项目时,我注意到在Cargo实体中,Evans使用的是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 个答案:

答案 0 :(得分:2)

可以实现的一些事情:

  • 封装跟踪ID不应为空的逻辑
  • 封装跟踪ID在设置后不应更改的逻辑。

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