集结和消息是否需要Axon中的hashCode和equals?

时间:2019-01-16 17:42:27

标签: axon

是否有必要向Axon聚合和消息中添加(覆盖)hashCode和equals方法? SonarQube中的分析表明,在这些实体上进行标准Axon操作时(端到端测试)未使用它们。而且,在调试过程中似乎也没有达到equals和hashCode方法。

1 个答案:

答案 0 :(得分:1)

在瓦迪姆那里观察正确。 从Axon的角度来看,只有一个地方需要添加equals()函数,该函数是一个Aggregate Member,包含在Aggregate(根)列表中。

axon-test模块的FixtureConfiguration将在处理命令之前和之后与聚合相匹配,以确保状态在命令处理程序中没有被更改。除非提供了equals()方法,否则Axon将使用深场比较。实体列表将错误地匹配实体,因为如果未提供equals(),则将使用对象引用。因此,要求您在列表/集合/地图中放置的“聚合成员”具有equals()函数的实现。

请注意,尽管这实际上并不理想。实体不应该是可互换的,因为它们不是由属性(如值对象和消息)从根本上定义的,而是由它们的标识和连续性的线程定义的。这是一个已知的警告,axon-test模块计划解决这一问题。

因此,为了简短地回答您的问题: 对于两者进行测试是不公平的,但是在实时系统上则没有必要。