实体或价值对象?

时间:2012-03-14 15:11:04

标签: domain-driven-design

我正在研究SIP路由信息的数据模型。我们以电话号码1-212-123456为例。两个服务提供商A和B具有路由信息(例如,IP地址),以建立与该电话号码的SIP会话。

因此,在我的模型中,我有一个名为 TelephoneNumber 的实体。我的问题是:将 TelephoneNumber 元素定义为值对象是否有意义?

首先,电话号码仅存在于一个或多个服务提供商的上下文中。如果没有服务提供商知道该电话号码的路由信息​​,则没有理由存在后者。

其次,如果 TelephoneNumber 是一个值对象,则会有两个相同电话号码的实例,每个服务提供商一个。在这种情况下,实体的主键将包含引用 ServiceProvider 的外键。在这种情况下,我看到有一些数据重复。

由于

1 个答案:

答案 0 :(得分:1)

值对象没有标识,可以通过其属性进行标识。如果“TelehponeNumber”类的两个实例被定义为相等,如果包含相同的数字,则可以将它们视为值对象,但是您对使用值对象的方法非常正式。如果将“TelephoneNumber”定义为值对象,则不要将其填充到自己的表中并给它一个标识(无主/外键mumbo jumbo),将其作为另一个实体的成员放入(路由如果我正确理解您的域名,信息似乎是正确的地方)。你真的不关心有多少个值对象的实例,因为它们只是另一个实体的一部分。

典型的价值对象是电话号码,电子邮件地址,金钱,社会安全号码等