域驱动设计区分两种模型类型:实体和值对象。在大多数示例中,实体的属性是值对象或其他实体,而值对象的属性大多是简单的字符串,整数等(即原始数据类型)。
这引出了一个问题:一个实体是否也可以拥有原始数据类型的属性?或者您通常将实体的每个属性建模为值对象或其他实体吗?
以下可能是回答此问题的示例:我们有一个实体Comment
,其属性为text
。 text
只是一个字符串变量还是一个值对象?
答案 0 :(得分:1)
虽然组成另一个实体或价值对象的实体是共同的态度,但这不是必要的。请记住,你应该考虑一个抽象。当使用它们时没有涉及业务逻辑时,原始类型是可以的。例如:
public class User {
private UserId id;
private String nickname;
private Date joinDate;
}
正如你所看到的,昵称是一种原始类型,因为我们不能用昵称做任何特别的事情。另一方面,joinDate应该是Value Object,因为date有一些逻辑(比较日期,添加,减去等)。
即使在"实施域驱动设计" Vaughn Vernon是由原始类型组成的实体的例子。