Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 如果实体成为聚合的根,聚合根是否使用根实体的现有ID,或者AR是否创建自己的ID?_Design Patterns_Domain Driven Design_Aggregateroot - Fatal编程技术网

Design patterns 如果实体成为聚合的根,聚合根是否使用根实体的现有ID,或者AR是否创建自己的ID?

Design patterns 如果实体成为聚合的根,聚合根是否使用根实体的现有ID,或者AR是否创建自己的ID?,design-patterns,domain-driven-design,aggregateroot,Design Patterns,Domain Driven Design,Aggregateroot,在领域驱动设计(DDD)中,一个实体总是有它自己的唯一标识 在我对DDD的阅读中,我看到了一些语句和示例,它们似乎混合了实体和聚合根之间的“唯一身份”概念。根据示例,它们可能意味着: 我只需要下面的一个接口 或 我两者都需要 我想知道就“Eric Evans型DDD”而言,哪种方法是“正确的” 例如,假设您的实体实现此接口,并在调用此方法时返回GUID: public interface IEntity { object IdThatIsUniqueForThisEntityObj

在领域驱动设计(DDD)中,一个实体总是有它自己的唯一标识

在我对DDD的阅读中,我看到了一些语句和示例,它们似乎混合了实体和聚合根之间的“唯一身份”概念。根据示例,它们可能意味着:

  • 我只需要下面的一个接口

  • 我两者都需要
我想知道就“Eric Evans型DDD”而言,哪种方法是“正确的”

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

public interface IEntity
{
   object IdThatIsUniqueForThisEntityObject { get; }
}
你是否也需要下面的那个

public interface IAggregateRoot
{
   object IdThatIsUniqueForThisAggregateRootObject { get; }
}
聚合根是否需要实现类似于上述接口的接口,以便它能够表示自己的唯一ID(对于聚合对象唯一的ID),该ID与其根实体的ID(对于聚合对象唯一的ID)是分开的,并且不同于根实体的ID(对于聚合对象唯一的ID)


或者聚合根是否应该仅使用根实体的ID(对于该EntityObject是唯一的ID)来表示聚合根的唯一ID?

您只需要EntityId。没有创建其他聚合根标识。聚合根是一个聚合,用于控制访问并将对象作为单个数据库工作单元进行组织。聚合不会为对象授予任何类型的“新”或附加标识


实体始终具有其唯一的实体标识,这就足够了。根据定义,检索作为聚合根的实体的操作也会在这样做时检索聚合。没有实体的概念,有时只是独立实体,有时是聚合根。因此,根本不需要“聚合根标识”的概念

您只需要EntityId。没有创建其他聚合根标识。聚合根是一个聚合,用于控制访问并将对象作为单个数据库工作单元进行组织。聚合不会为对象授予任何类型的“新”或附加标识


实体始终具有其唯一的实体标识,这就足够了。根据定义,检索作为聚合根的实体的操作也会在这样做时检索聚合。没有实体的概念,有时只是独立实体,有时是聚合根。因此,根本不需要“聚合根标识”的概念

多谢各位。那么说“域上下文中的所有实体和值对象都必须包含在称为聚合的边界中,访问域模型中的任何实体或值对象的唯一方法是通过聚合根。实体和/或值对象不能(不应该)访问该边界,这对吗?”是否可以在聚合边界之外访问。”?否。值对象(只要它们是不可变的)可以来自任何地方,并且可以在任何地方使用。聚合规则不适用于值对象。除此之外,这一说法基本上是正确的。独立对象实际上是一个对象的聚合。因此,是的,所有实体对象都应该作为聚合根(将独立对象定义为聚合根)或通过从实体所属的聚合根进行遍历来访问。唯一的例外是在工厂里。组装一个新的聚合需要任何东西。访问规则适用于最终完整的聚合。谢谢。那么说“域上下文中的所有实体和值对象都必须包含在称为聚合的边界中,访问域模型中的任何实体或值对象的唯一方法是通过聚合根。实体和/或值对象不能(不应该)访问该边界,这对吗?”是否可以在聚合边界之外访问。”?否。值对象(只要它们是不可变的)可以来自任何地方,并且可以在任何地方使用。聚合规则不适用于值对象。除此之外,这一说法基本上是正确的。独立对象实际上是一个对象的聚合。因此,是的,所有实体对象都应该作为聚合根(将独立对象定义为聚合根)或通过从实体所属的聚合根进行遍历来访问。唯一的例外是在工厂里。组装一个新的聚合需要任何东西。访问规则适用于最终的完整聚合。