Entity 聚合根/实体的差异
我正在努力解决这个问题:如何判断一个概念是聚合根还是一个实体(是AR的一部分)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时,垃圾收集器还应该收集其中的所有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将这个概念命名为“有界上下文”或“域”
我认为你的困惑来自于缺乏前期设计和没有正确定义那些“有界上下文”