DDD:“国家”应该是价值对象还是实体?

时间:2009-09-02 17:06:06

标签: oop domain-driven-design

'country':DDD中的值对象或实体?

意见无论如何都赞赏。

并且,在哪里存储国家/地区名称/代码表? D B? XML? 在课堂上?

谢谢!

3 个答案:

答案 0 :(得分:17)

如果您的域名是地理位置或政治域名,那么它可能是一个实体,但在一般情况下,国家/地区只是与地址等内容相关联的值。在这种情况下,在对象模型的上下文中,它只是一个值。

至于存储,域模型并不在乎。如果方便,您可以使用数据库,如果您愿意,可以使用XML,如果您有与国家/地区相关的行为,则可以使用类。

答案 1 :(得分:13)

实体的一个特征是它具有生命周期,即它随时间而变化。值对象不会。实际上,值对象应该是不可变的。因此,问自己的问题是,“国家的目标是否会随着时间而改变?”

区分实体和值对象的另一个方面是具有相同属性的两个值对象是相同的。因此,如果您有一个名为“France”的国家/地区实例,那么相同是另一个名为“France”的国家/地区实例,即使它们是两个不同的实例(假设这是唯一的属性)国家为了讨论这个问题)。想想大多数语言中的字符串,字符串“fubar”等于字符串“fubar”的另一个实例。

另一方面,实体即使具有相同的属性也是不同的。名为“John Smith”的一位客户可能与名为“John Smith”的另一位客户不同。

因此,鉴于这些特征,您应该能够做出决定。由于只有一个“法国”而且它不会随着时间而改变,它可能是一个有价值的对象 - 除非你的应用需要跟踪一个可能随时间变化的国家的更多信息。

答案 2 :(得分:4)

想象一下:

您有另一个实体 - 客户 客户实体引用国家/地区对象 您有2个实体实例,其中填充的Country对象具有相同的值(即“France”)
您正在从第一个实体(或第一个实体对象)

中删除国家/地区对象
  • 如果您想要为第二个实体对象删除国家/地区 =>国家是实体对象
  • 如果您仅删除第一个实体对象的国家/地区 =>国家是价值对象