在查看样本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;
}
答案 0 :(得分:2)
可以实现的一些事情:
使用普通字符串,Cargo对象必须知道这些规则。使用值对象方法意味着TrackingId维护这些关于自身的规则。