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國家只對第一個實體對象被刪除
    =>國家是一個值對象
相關問題