1

値オブジェクト(概念的なアイデンティティがなく、属性のセットがその定義など)とエンティティとの違いは理解していると思いますが、プリミティブ型( intstring ...)の値かどうかはまだわかりません。エンティティのプロパティに直接割り当てられていることもVOと見なされます。

たとえば、次のコードでは、に割り当てられた(タイプのName)オブジェクトPerson.NameVOですが、に割り当てられた値でありPerson.FirstNameVOPerson.LastNamePerson.Age見なされますか?

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 = ...
}

ありがとうございました

4

2 に答える 2

3

string値がプリミティブ型(またはなどint)であるか、プリミティブ型で構成される複合型(など)であるかは関係ありませんName。重要なのは、それをアイデンティティのない単なる「値」と考えることです。つまり、それは値オブジェクトです。

それをプリミティブに保つか、クラスにラップするかの決定は、実装の詳細です。特定の型は、プリミティブ型よりも将来拡張/機能を追加する方が簡単です。

于 2012-07-12T05:28:02.287 に答える
1

この関連する質問を確認してください...値オブジェクトは「概念的な」ものよりも実装上のものです...考えてみると、シングルトンとフライウェイトパターンは、最適化の目的でIDを持つオブジェクトを値オブジェクトに変換することです。 。それはまた、可変または不変として何かを実装することを選択することに関連しています。Personは不変であるといつでも言うことができますが、しばらくすると、あなたはさまざまな属性を持つ「新しい」人になります。これは実装の決定であり、ドメインや概念的な決定ではありません。(不変のものは値オブジェクトである傾向があり、可変のものはオブジェクトを識別します)。

于 2012-07-11T21:55:03.627 に答える