2012-07-11 60 views
1

我想我明白值對象(他們有沒有概念上的身份,設置它的屬性是它的定義等),他們從實體如何不同,但我仍然疑惑是否(基本類型的值int,string ...)被直接分配給的實體的實體也被認爲是VO這些值也是值對象嗎?

例如,在下面的代碼分配給Person.Name(的Name型)的目標是一VO,但被分配給Person.FirstNamePerson.LastNamePerson.Age值也被認爲VO

public class Person 
{ 
    public string FirstName = ... 
    public string LastName = ... 
    public int Age = ... 

    public Name Name = ... 
       ... 
} 

public class Name 
{ 
    public string FirstName = ... 
    public string LastName = ... 
    public int Age = ... 
} 

謝謝

+0

這取決於。我會說First/LastName可能會以名字VO結尾,而Age則會以它自己的VO來表示。但是,如果沒有特定的背景和行爲,這很難說,這會使其具有價值。 – 2012-07-11 21:03:10

回答

3

如果值是原始類型(如stringint)或由基元類型(如Name)組成的複雜類型,則無關緊要。重要的是,你認爲它僅僅是一種沒有任何身份的「價值」 - 那麼它就是一個價值對象。

將其保留爲原始類型或將其包裝在類中的決定是一個實現細節。與原始類型相比,特定類型更容易在將來擴展/添加功能。

+0

感謝您的幫助 – user1483278 2012-07-12 18:37:04

1

入住這related question ...值對象是更多的實現的事情,一個「概念」一...如果你想想看,辛格爾頓和輕量級的模式即將開啓的對象爲了優化的目的而將一個身份賦值給一個值對象......這也與選擇實現可變或不可變的東西有關。你總是可以說人是不可改變的,但過了一段時間,你是一個具有不同屬性的「新」人。這是一個實施決策,而不是一個領域或概念。 (不變的東西往往是價值對象,可變的身份對象)。

+1

這實際上違背了領域驅動設計的本質。我認爲你使用標準設計模式(例如singleton和flyweight,它們是實現工具)混淆了域設計概念(例如實體和值對象,它們是概念工具)。 – casablanca 2012-07-12 05:30:04