Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/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
Entity 聚合根/实体的差异_Entity_Domain Driven Design_Domain Model_Aggregateroot - Fatal编程技术网

Entity 聚合根/实体的差异

Entity 聚合根/实体的差异,entity,domain-driven-design,domain-model,aggregateroot,Entity,Domain Driven Design,Domain Model,Aggregateroot,我正在努力解决这个问题:如何判断一个概念是聚合根还是一个实体(是AR的一部分) 他们都有身份证 它们都由实体或值对象组成 也许如果我需要引用其他AR中的实体,那么我需要将其设置为AR:如果在应用程序的某个地方我需要将某个东西链接到特定的订单行,那么订单行将成为AR 或者只是从生命周期的角度来看,但如果是的话,我不认为在AR中有实体有什么意义:它只是一个值对象 或者可能是因为一个实体可以更改AR,然后我将其升级为AR。实体只能从AR中检索,不能从其他AR中引用。所以,当您删除AR时,垃圾收集器

我正在努力解决这个问题:如何判断一个概念是聚合根还是一个实体(是AR的一部分)

  • 他们都有身份证
  • 它们都由实体或值对象组成
也许如果我需要引用其他AR中的实体,那么我需要将其设置为AR:如果在应用程序的某个地方我需要将某个东西链接到特定的订单行,那么订单行将成为AR

或者只是从生命周期的角度来看,但如果是的话,我不认为在AR中有实体有什么意义:它只是一个值对象


或者可能是因为一个实体可以更改AR,然后我将其升级为AR。

实体只能从AR中检索,不能从其他AR中引用。所以,当您删除AR时,垃圾收集器还应该收集其中的所有Entite/valuesobject

我通过一个(通过id)将需要检索的所有内容都生成AR。您说过(实体和AR)都有ID。如果实体具有全局id,这意味着您希望通过id检索它们,所以它们也应该是ARs

实体的示例可以是对帖子的回复。您想检索一篇帖子(AR),但不按id检索回复,而是从帖子AR中获取回复。但如果您想对回复进行评级、删除、编辑或其他操作,那么它可能会成为AR,因为您希望在不首先检索帖子的情况下检索回复(以及其他回复,这将是一项开销)

尝试创建小的AR(内部没有大的实体树)。当您想从另一个AR引用AR时,请通过VOID执行,例如
fooagregateId(1)
。不要引用AR对象,否则您将不得不一次加载许多AR,或者使用延迟加载。

查看下面的博客文章和评论

从技术角度来看,AR是一个事务边界。换句话说,一组应始终保持一致的实体。从这个定义来看,AR甚至不需要Id

从业务的角度来看,它是领域中的一个基本概念,是泛在语言的一部分,而实体不一定是

例如,对于汽车销售公司来说,汽车是AR,但发动机、车轮、轮胎等只是实体。但是如果你用汽车制造能力扩展你的汽车销售公司的软件,那么:发动机、轮胎等:很可能会在软件的这一部分自行AR。因此,如果你有一个销售汽车并制造汽车的软件,你有时会根据上下文有不同的AR。某些对象将在一个位置上是AR,而在另一个位置上是实体。DDD将这个概念命名为“有界上下文”或“域”

我认为你的困惑来自于缺乏前期设计和没有正确定义那些“有界上下文”