DDD:实体可以具有原始数据类型的属性吗?
DDD: Can an entity have attributes of primitive data types?
领域驱动设计区分了两种模型类型:实体和值对象。在大多数示例中,实体的属性是值对象或其他实体,而值对象的属性大多是简单的字符串、整数等(即原始数据类型)。
这让我想到了一个问题:实体是否也可以具有原始数据类型的属性?还是您通常将实体的每个属性建模为值对象或另一个实体?
以下可能是回答此问题的示例:我们有一个实体 Comment
,其属性为 text
。 text
只是一个字符串变量还是一个值对象?
虽然将另一个实体或值对象组合成一个实体是普遍的态度,但这不是必需的。请记住,您应该考虑抽象。当使用它们时不涉及业务逻辑时,原始类型是可以的。例如:
public class User {
private UserId id;
private String nickname;
private Date joinDate;
}
如您所见,nickname 是一个原始类型,因为我们不能对nickname 做任何特殊的事情。另一方面,joinDate 应该是值对象,因为日期有一些逻辑(如比较日期、添加、减去等)
甚至在 Vaughn Vernon 的 "Implemeting Domain-Driven Design" 中也有由基本类型组成的实体示例。
领域驱动设计区分了两种模型类型:实体和值对象。在大多数示例中,实体的属性是值对象或其他实体,而值对象的属性大多是简单的字符串、整数等(即原始数据类型)。
这让我想到了一个问题:实体是否也可以具有原始数据类型的属性?还是您通常将实体的每个属性建模为值对象或另一个实体?
以下可能是回答此问题的示例:我们有一个实体 Comment
,其属性为 text
。 text
只是一个字符串变量还是一个值对象?
虽然将另一个实体或值对象组合成一个实体是普遍的态度,但这不是必需的。请记住,您应该考虑抽象。当使用它们时不涉及业务逻辑时,原始类型是可以的。例如:
public class User {
private UserId id;
private String nickname;
private Date joinDate;
}
如您所见,nickname 是一个原始类型,因为我们不能对nickname 做任何特殊的事情。另一方面,joinDate 应该是值对象,因为日期有一些逻辑(如比较日期、添加、减去等)
甚至在 Vaughn Vernon 的 "Implemeting Domain-Driven Design" 中也有由基本类型组成的实体示例。