2009-09-02 94 views

回答

15

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

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

+0

嗯,我超晚了,但你如何提出一个值对象被'存储'?我想一个存储库是没有问题的,也许在内存中的值是静态的? – 2014-04-25 10:35:12

+0

值对象不会成为聚合根,因此它不需要自己的存储库。如果使用的是ORM,则可以将值对象映射到父聚合根下的表中的组合字段,或者甚至在某些情况下将单独的表与唯一有意义的身份标识为拥有者对象的唯一表。 – JasonTrue 2014-04-25 16:21:43

10

一个实体的特征之一是它有一个生命周期,即它随时间而变化。值对象不。事实上,价值对象应该是不可变的。所以问自己的问题是,“这个国家的对象随着时间而改变吗?”

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

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

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

+7

法国已经在5.0版本中:http://en.wikipedia.org/wiki/French_Fifth_Republic;) – MSalters 2009-09-14 13:43:29

3

想象一下:

您有另一个实体 - 客户。
客户实体引用国家对象。
你有填充国家2个实体实例具有相同的值(即“法国”)对象
您从

  • 如果你想国家为删除第一个实体(或第一实体对象)删去国家对象第二个实体对象太
    =>国家是一个实体对象
  • 如果你VANT国家只对第一个实体对象被删除
    =>国家是一个值对象
相关问题