Domain driven design Axon框架中aggregare成员上的EntityId注释
从Axon框架的文档中,以下是关于Domain driven design Axon框架中aggregare成员上的EntityId注释,domain-driven-design,axon,Domain Driven Design,Axon,从Axon框架的文档中,以下是关于@EntityId的说明: Field annotation that marks the field containing the identifier of an Entity. Commands for a child Entity are routed to the Entity if the value of the Command's {@link #routingKey()} property matches the value of the an
@EntityId
的说明:
Field annotation that marks the field containing the identifier of an Entity. Commands for a child Entity are
routed to the Entity if the value of the Command's {@link #routingKey()} property matches the value of the annotated field.
我仍然不明白,如果我的实体/聚合成员没有它,会产生什么影响。有人能帮忙吗?EntityId是将对象中的字段标记为该对象的“实体标识符”的东西 从这里,我们可以了解聚合的简短描述是什么: 关联对象的集合,在数据更改方面充当单个单元 对它的引用仅限于单个单元,即聚合根 而且,一致性规则适用于对象组 这里的第一句话指定聚合通常不是单个对象,而是多个对象。 这些对象通常由实体和值对象组成,它们都具有以下描述: 价值对象 基本上由其属性定义的对象。这使得它们不可变 实体 基本上不是由属性定义的对象,而是由连续性线程和标识定义的对象 现在,我所分享的基本上只是领域驱动的设计细节。正如您所知,Axon旨在提供一种方法,根据这些指南正确建模。因此,我们知道聚合通常不是只有聚合根的单个对象,但它可能由多个对象组成,其中一些对象也需要可识别 这使
@EntityId
成为一个可用的组件,只要您有一个包含多个实体的聚合。通过Axon将对象标记为实体可以通过使用@AggregateMember
注释来实现,使这些对象成为我们称之为聚合的“关联对象组”中的“命令处理成员”
您可能已经注意到,主聚合类Aggregate Root需要使用@AggregateIdentifier
。该注释本质上只是@EntityId
的一个更具体的版本。因此,它被元注释为@EntityId
。由于聚合根需要可识别,因此它是描述中定义的实体
因此,当谈到何时使用@EntityId
:如果您有一个简单的单类聚合,那么您已经在使用它了。当您需要多个实体(Axon的聚合成员)并且这些实体也需要可识别时,就可以清楚地使用它
当您希望这些聚合成员也处理命令时,通常会出现这种需求。更具体地说,如果您有一个可以处理命令的特定类型的聚合成员集合,则需要您在这些对象上提供@EntityId
注释。否则,Axon无法知道要处理该命令的确切实例
顺便说一句,多实体聚合的细节在参考指南页上有定义。谢谢@Steven的回答。在这里确认我的理解,如果我们有一个AggregateMember-like列表,那么在这种情况下,我们应该强制拥有EntityId,否则Axon无法知道您想要处理该命令的确切实例,但是如果我们有一个喜欢的人作为AggregateMember,那么拥有EntityId不是强制性的吗?