2012-04-26 2 views
5

私は、ユーザーがTwitterと同様の方法でお互いをフォローできるアプリケーションに取り組んでいます。DDD:接続オブジェクトはエンティティオブジェクトまたはバリューオブジェクトですか?

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

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

私はConnectionオブジェクトがエンティティオブジェクトではなくバリューオブジェクトだとは思いますが、わかりません。この決定で私を助けてくれますか?

答えて

4

エンティティが一意で、アイデンティティを持つという概念を持ちます(つまり、一意のユーザーが1人しか存在しない可能性があります)。 Connectionは、他のUserエンティティに依存します。それは2人のユーザーの間のいくつかの側面を表します。その側面は、アクティブまたは非アクティブな接続があるかどうかです。ユーザーが接続しているデータが含まれていない場合、接続にはIDはありません。データベースにはそれ自身のプライマリキーを持つことさえあるかもしれませんが、ドメインの観点からは、それ自身のアイデンティティはありません。

したがって、Connectionオブジェクトです。


が私の結論をサポートするために、 Microsoft.Net Architecting Applications for the Enterprise、187ページには、こう述べています。

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

も:

つ以上のコメントは エンティティと値オブジェクトの違いを説明するために必要とされます。値オブジェクトには、リポジトリまたはデータ マッパーは必要ありません。エンティティのリポジトリのみが必要です。 特定のエンティティのリポジトリ(またはマッパー)は、特定のエンティティに依存するすべての値オブジェクトのケアを確かに受けます( )。

+0

"接続しているデータが含まれていない場合、接続にはIDがありません" - 接続はFollowerIDとTargetIDの組み合わせで一意です。だから私がTaregtIDとFollowerIDを持っていれば、私はそれがユーザIDだと信じて、接続を特定することができます。だから、それはどのようにエンティティオブジェクトではありませんか? –

+0

@HariSubramaniam、それを置く別の方法は[this site](http://lostechies.com/joeocampo/2007/04/23/a-discussion-on-domain-driven-design-value-objects/)です、 "値オブジェクトはエンティティなしではそれ自身では生きられません。"確かにどちらがどちらであるかを決めることは必ずしも容易ではありませんが、これについて考え、研究した後、私は価値のあるオブジェクトに大きく傾いています。 – Matt

2

数時間前、私はクローニングを発明した科学者の漫画を見ました。彼が自分を複製するたびに、彼は以前のバージョンを破壊した。デモンストレーションを見ていた人は、中断して破壊部分を破壊することに決めたので、2人の科学者がいました。漫画は面白い存在論的な質問で終わった。

値とエンティティは、1つまたは別のフォームにIDフィールドを持つかどうかについてのものではありません。ポイントは - 私たちはドメインの観点からこれらのオブジェクトをどのように見ているのですか?それらが価値オブジェクトであれば、それらの価値のみが重要です - 第1、第3、第53の科学者は同じです。アイデンティティを気にするなら、第3の科学者のクローニングが決して第1のものにならないと思うなら、私たちの目的は実体です。

関連する問題