我通常每个聚集有5-6个事件,并且不想在DB中存储投影。始终在查询时进行视图投影的最简单方法是什么?
答案 0 :(得分:1)
对此的简短回答是,没有简单/快速的方法可以做到这一点。
但是,最肯定的是可以实现“请求时重播给定事件”设置。
我建议您执行的操作分几个步骤:
@EventHandler
带注释的方法)@QueryHandler
注释的方法。EventStore
检索事件流。如果这基于aggregateIdentifier
,请使用EventStore#readEvents(String)
方法。如果您需要整个事件流,则需要使用StreamableMessageSource#openStream(TrackingToken)
方法(注意:EventStore
接口实现StreamableMessageSource
)AnnotationEventHandlerAdapter
,为其提供一个新的查询模型实例AnnotationEventHandlerAdapter#handle(EventMessage)
方法。此方法将调用查询模型对象上的@EventHandler
带注释的方法因此,再次,我认为这不是太琐碎,容易或快速设置。 此外,第3步也有一个警告。基于聚合标识符检索给定聚合的流非常快速/简洁,因为聚合通常没有很多事件。
但是,如果查询模型跨越多个聚合,则基于TrackingToken
检索事件流可以确保您引入 entire 事件存储以实例化您的飞行中的模型。当然,您可以微调您希望事件流在处理TrackingToken
时从中返回事件的时间点,但是更改非常高,您将不完整且相对较慢。
但是,您表示要检索给定聚合标识符的事件。 因此,我认为这在您的情况下应该是可行的解决方案。
希望这会有所帮助!