DDD:用户类型应该是值对象还是实体?

时间:2016-10-19 13:03:25

标签: domain-driven-design

用户具有用户类型,并且这些用户类型存储在具有自己的属性的数据库中,并且具有一些id以将其引用到用户表中。

case class User(id: Int, userType: Int, firstName: String, lastName: String)
case class UserType(id: Int, name: String)

我也有一个聚合对象。

case class User(userData: User, userType: UserType)

应用程序管理员可以创建自己的用户类型并将其分配给不同的应用程序用户。

附加信息:这些用户类型一旦创建就无法修改,但在通过一些验证后可以删除。

用户类型应该是一个实体(因为它需要存储一些id)或者是一个值对象(因为除了id之外,两个具有相同值的用户类型实际上是同一个对象)?

修改

应用程序管理员可以创建自己的用户类型,因此UserType需要拥有自己的存储库,这很清楚。用户存储库可以只具有用户类型的引用,而不是让用户自己键入类型,但问题是用户类型是否可以被视为实体或值对象。

2 个答案:

答案 0 :(得分:1)

我认为两者兼而有之。

在“用户管理”的上下文中,您使用无法进行查询的userType VO创建或修改用户。创建用户并在cosntructor中请求userType(VO)或使用aggregate / entity函数来修改用户类型。即:User.ChangeType(userTypeVO)。

当你在“你的系统配置上下文”时,你应该将UserType视为实体,因为你必须引用它来删除,修改(修复拼写错误?)或创建新的userTypes。

答案 1 :(得分:0)

我认为您的问题来自持久性问题,而不是来自业务领域。 有两个用户类型具有相同的名称,但不同的ID是否有任何意义?如果答案是“否”,那么这肯定是一个价值对象。