0

在领域驱动设计 (DDD) 中,实体始终具有自己的唯一身份。

在我阅读 DDD 时,我看到了似乎在实体和聚合根之间混合了“唯一身份”概念的陈述和示例。根据示例,它们可以暗示:

  • 我只需要以下接口之一。

或者

  • 我两个都需要。

我想知道就“Eric Evans type DDD”而言,哪种方法是“正确的”。

例如,假设您的实体实现了此接口并在调用此方法时返回一个 GUID:

public interface IEntity
{
   object IdThatIsUniqueForThisEntityObject { get; }
}

您是否也需要下面的那个?

public interface IAggregateRoot
{
   object IdThatIsUniqueForThisAggregateRootObject { get; }
}

Aggregate Root 是否需要实现与上述类似的接口,以便它可以表示其自己的唯一 ID (IdThatIsUniqueForThisAggregateRootObject),该 ID 与其根实体的 ID (IdThatIsUniqueForThisEntityObject) 不同且不同?

或者聚合根应该只使用根实体的 (IdThatIsUniqueForThisEntityObject) 来表示聚合根的唯一 ID?

4

1 回答 1

3

您只需要 EntityId。没有创建额外的聚合根身份。聚合根是用于控制访问并将对象组织为单个数据库工作单元的聚合。聚合不赋予对象任何种类的“新”或附加标识。

一个实体总是有它唯一的实体身份,这就足够了。根据定义,检索作为聚合根的实体的操作也会在此过程中检索聚合。没有实体的概念,它有时只是独立实体,有时是聚合根。所以也根本不需要“聚合根身份”的概念。

于 2011-05-22T22:44:47.197 回答