6

Twitter と同じような方法で、ユーザーが相互にフォローできるアプリケーションに取り組んでいます。

DDD を読んだ後、ユーザーがエンティティ オブジェクトであることを理解しました。一意の ID を使用してそれらを参照しています。

あるユーザーが別のユーザーを「フォロー」する (つまり、接続を形成する) と、その関係は多対多テーブルに格納されます。そのフィールドには、、、FollowerIDおよびTargetIDが含まれStatusます。フォロワーとターゲットの組み合わせごとに 2 つのレコード (1 つはアクティブ、もう 1 つは非アクティブ) しか存在できないため、属性に基づいてオブジェクトを安全に識別できます。

したがって、接続オブジェクトはエンティティ オブジェクトではなく値オブジェクトだと思いますが、よくわかりません。この決定を手伝ってもらえますか?

4

2 に答える 2

5

エンティティが一意であり、ID を持つという概念を持っていることは正しいです (つまり、一意のユーザーは 1 人しか存在できません)。Aは他のエンティティConnectionに依存しています。Userこれは、2 人のユーザー間の何らかの側面を表しています。その側面は、アクティブまたは非アクティブな接続があるかどうかです。ユーザーが接続しているデータが含まれていない場合、接続には ID がありません。データベース内に独自の主キーがある場合もありますが、ドメインの観点からは、独自の ID はありません。

したがって、それConnection価値のあるオブジェクトだと思います。


私の結論を裏付けるために、Microsoft.Net Architecting Applications for the Enterpriseの 187 ページには次のように書かれています。

値オブジェクト クラスは、主にデータを含み、含まれるデータのために存在するドメイン内のエンティティを表します。値オブジェクトは、含まれる値の組み合わせによって完全に識別されます。一方、エンティティ オブジェクトには、含まれるデータに関係なく、独自の寿命と豊富な動作があります。エンティティ オブジェクトは通常、有効期間が長いオブジェクトです。値オブジェクトは、エンティティの側面を表し、エンティティに関連してのみ存在できます。

また、189ページにもあります:

エンティティと値オブジェクトの違いを説明するには、もう 1 つコメントが必要です。値オブジェクトのリポジトリやデータ マッパーは必要ありません。エンティティに対してのみリポジトリが必要です。特定のエンティティのリポジトリ (またはマッパー) は、特定のエンティティに依存するすべての値オブジェクトを確実に処理します。

于 2012-04-26T14:54:22.253 に答える
4

少し前に、クローンを発明した科学者についての漫画を見ました。彼は自分のクローンを作成するたびに、以前のバージョンを破壊しました。その後、デモを見ていた人が割り込んで破壊部分を妨害したため、科学者は 2 人になりました。漫画は、いくつかの興味深い実存的な質問で終わりました。

値とエンティティは、いずれかのフォームに id フィールドがあるかどうかについてではありません。ポイントは、ドメインの観点からこれらのオブジェクトをどのように見ているかです。それらが値オブジェクトである場合、それらの値のみが重要です。1 番目、3 番目、および 53 番目の科学者は同じです。アイデンティティを気にするなら、3 番目の科学者のクローン作成が 1 番目の科学者のようになることは決してないと考えるなら、私たちのオブジェクトは実体です。

于 2012-05-02T09:17:24.950 に答える