9

私は DDD が初めてで、いくつかの概念を理解しようと懸命に努力しています。ドメイン内でどのオブジェクトが Entity オブジェクトで、どのオブジェクトが Value オブジェクトであるかをどのように判断し、どのように正確に異なる扱いをするのでしょうか?

4

2 に答える 2

1

Jak Charlton のブログから:

エンティティ「これは私のエンティティです。似たようなものはたくさんありますが、これは私のものです」</p>

エンティティの重要な特徴を定義するのは、アイデンティティを持っていることです。エンティティはシステム内で一意であり、同じアイデンティティを持たない限り、同じエンティティがどれほど類似していても、他のエンティティは存在しません。

ID はエンティティでさまざまな方法で表すことができます。数値識別子 (従来の CustomerID)、Guid (従来の ... 気にしないでください)、または自然キー (顧客の CustomerNumber など) である可能性があります。最初にあなたから購入したときに、CRM システムによって提供されます)。

どちらの表現方法を選択しても、エンティティは ID を持つことによって定義されます。

値オブジェクト 値オブジェクトの重要な特徴は、ID がないことです。少し単純化されているかもしれませんが、値オブジェクトの意図は、属性のみで何かを表すことです。2 つの VO が同一の属性を持つ場合があり、その場合、それらは同一です。ただし、属性以外の価値はありません。

VO に共通するもう 1 つの側面は、VO はおそらく不変であるべきであり、一度作成されると変更または変更できないことです。新しいものを作成できますが、ID がないため、別のものを変更するのと同じです。

自動車工場システム アプリケーション (プレートなし) の POO のカー クラスを考えてみましょう。2 台の車が同じ (同じモデル、エンジン、色、重量など) であっても、すべての車は一意であり、ID車両識別番号によって区別できます。

2 台の車は、その属性Car1.equals(Car2)が同じであることはありますが、VIN が原因で同じ車ではありませんCar1 != Car2。車の色が変わった場合、それは他の車ではなく、他の属性を持つ同じ車です。これはエンティティです。

nameここで、とフィールドを使用して (車の) カラー クラスを考えRGBます。シアン色は'Cyan'名前に とがありR = 0 G = 255 B = 255ます。その属性が ID であるため、他の ID フィールドは必要ありません。色はVOであり、名前またはRBG(またはその両方)を変更すると他の色を表すため、不変でなければなりません...または名前とRGBが一致しない場合、この場合のバグ;)

Color1.equals(Color)Color1 == Color2常に同じ結果が得られる必要があります。

于 2014-03-28T11:48:26.477 に答える
1

私が見ているように、ドメイン オブジェクトは基本的にビジネス ドメインの名詞を表し、ID を持っていますが、値オブジェクトはビジネスにとって特別な意味を持たず (MonetaryAmount を考えてください)、ID を持っていません。

于 2009-01-29T17:40:20.940 に答える