聚合和消息是否需要 Axon 中的 hashCode 和 equals?
Are hashCode and equals in Axon needed for aggrregates and messages?
是否有必要向 Axon 聚合和消息添加(覆盖)hashCode 和 equals 方法? SonarQube 中的分析表明,在对这些实体执行标准 Axon 操作时(在端到端测试中),它们并未被使用。此外,在调试期间,似乎也没有达到 equals 和 hashCode 方法。
Vadim 观察正确。
从 Axon 的角度来看,只有一个地方需要添加一个 equals()
函数,它是一个聚合成员,包含在聚合(根)的列表中。
axon-test
模块的 FixtureConfiguration
将在处理命令之前和之后匹配聚合,以确保命令处理程序中的状态未被更改。 Axon 使用深场比较,除非提供 equals()
方法。实体列表将不正确地匹配实体,因为如果未提供 equals()
将使用对象引用。因此,您放置在 list/set/map 中的 'Aggregate Members' 需要实现 equals()
函数。
请注意,这实际上并不理想。实体不应该是可互换的,因为它们不是由它们的属性(如值对象和消息)从根本上定义的,而是由它们的身份和连续性线程定义的。这是一个已知的警告,axon-test
模块计划在某一天解决。
所以,简短地回答你的问题:
对于同时拥有两者的测试是非常公平的,但在实时系统上则没有必要。
是否有必要向 Axon 聚合和消息添加(覆盖)hashCode 和 equals 方法? SonarQube 中的分析表明,在对这些实体执行标准 Axon 操作时(在端到端测试中),它们并未被使用。此外,在调试期间,似乎也没有达到 equals 和 hashCode 方法。
Vadim 观察正确。
从 Axon 的角度来看,只有一个地方需要添加一个 equals()
函数,它是一个聚合成员,包含在聚合(根)的列表中。
axon-test
模块的 FixtureConfiguration
将在处理命令之前和之后匹配聚合,以确保命令处理程序中的状态未被更改。 Axon 使用深场比较,除非提供 equals()
方法。实体列表将不正确地匹配实体,因为如果未提供 equals()
将使用对象引用。因此,您放置在 list/set/map 中的 'Aggregate Members' 需要实现 equals()
函数。
请注意,这实际上并不理想。实体不应该是可互换的,因为它们不是由它们的属性(如值对象和消息)从根本上定义的,而是由它们的身份和连续性线程定义的。这是一个已知的警告,axon-test
模块计划在某一天解决。
所以,简短地回答你的问题: 对于同时拥有两者的测试是非常公平的,但在实时系统上则没有必要。