0

ドメイン駆動設計(DDD)では、エンティティは常に独自のIDを持っています。

DDDを読んでいると、エンティティと集約ルートの間の「一意のアイデンティティ」の概念が混在しているように見えるステートメントと例を見てきました。例によっては、次のことを意味する場合があります。

  • 以下のインターフェースの1つだけが必要です。

また

  • 両方必要です。

「EricEvanstypeDDD」に関しては、どちらのアプローチが「正しい」か知りたいです。

たとえば、エンティティがこのインターフェイスを実装し、このメソッドが呼び出されたときにGUIDを返すとします。

public interface IEntity
{
   object IdThatIsUniqueForThisEntityObject { get; }
}

以下のものも必要ですか?

public interface IAggregateRoot
{
   object IdThatIsUniqueForThisAggregateRootObject { get; }
}

アグリゲートルートは、ルートエンティティのID(IdThatIsUniqueForThisEntityObject)とは別の独自のID(IdThatIsUniqueForThisAggregateRootObject)を表すことができるように、上記のようなインターフェイスを実装する必要がありますか?

または、集約ルートは、ルートエンティティ(IdThatIsUniqueForThisEntityObject)を使用して、集約ルートの一意のIDを表す必要がありますか?

4

1 に答える 1

3

必要なのはEntityIdだけです。作成される追加の集約ルートIDはありません。アグリゲートルートは、アクセスを制御し、データベース作業の単一ユニットとしてオブジェクトを編成するために使用されるアグリゲートです。アグリゲートは、オブジェクトにいかなる種類の「新しい」または追加のIDも付与しません。

エンティティには常に一意のエンティティIDがあり、それで十分です。定義上、集約ルートであるエンティティを取得する操作は、その際に集約も取得します。スタンドアロンエンティティである場合もあれば、集約ルートである場合もあるエンティティの概念はありません。したがって、「集約ルートID」の概念もまったく必要ありません。

于 2011-05-22T22:44:47.197 に答える