Domain driven design 实体还是价值对象?

Domain driven design 实体还是价值对象?,domain-driven-design,Domain Driven Design,我正在研究SIP路由信息的数据模型。让我们以电话号码1-212-123456为例。两个服务提供商A和B具有路由信息(例如,IP地址)以建立到该电话号码的SIP会话 因此,在我的模型中,我有一个名为电话号码的实体。我的问题是:将TelephoneNumber元素定义为值对象有意义吗 首先,电话号码仅存在于一个或多个服务提供商的上下文中。如果没有服务提供商知道此电话号码的路由信息,则没有理由存在后者 其次,如果TelephoneNumber是一个值对象,则同一电话号码将有两个实例,每个服务提供商一个

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

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

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

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


感谢

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


典型的值对象是电话号码、电子邮件地址、金钱、社会保险号码等

最后,我将电话号码类型定义为一个实体,因为我需要区分单个服务提供商的电话号码。电话号码字符串将是电话号码实体的标识,该标识将是服务提供商的本地标识。但平等性问题确实是关键。如果你有两个电话号码,其中一个是Verizon(111)111-1111和AT&T(111)111-1111中的一个,你认为它们是相等的吗?