我开始使用Axon框架并遇到了一些障碍。
虽然我可以使用他们的ID加载单个聚合,但我无法弄清楚如何获取所有聚合的列表,或者所有聚合ID的列表。
EventSourcingRepository
类只有load()
个方法返回一个聚合。
是否存在所有聚合(ID)的方法,或者我应该保留轴突之外的所有聚合ID的列表?
为了简单起见,我现在只使用InMemoryEventStorageEngine
。
我使用的是Axon 3.0.7。
答案 0 :(得分:2)
首先,我想知道为什么要从li
检索所有聚合的完整列表。
设置Repository
界面,以便您可以加载Repository
来处理命令或创建新的Aggregate
。
询问您的问题,我几乎猜测您是否将其用于查询目的而不是命令处理。
然而,这不是Aggregate
的预期用途。
您可以想到的一个原因是,您希望实现API调用以将命令发布到应用程序中特定类型的所有EventSourcingRepository
。
那么采用这种情况是的,你需要自己存储aggregateId引用。
但结论我之前的问题:为什么要通过Aggregates
界面检索聚合列表?
回复更新
关于你的评论,我在答案中添加了以下内容:
Axon帮助您设置应用程序时考虑事件源,但也使用CQRS(命令查询责任分离)。 这意味着应用程序的命令和查询端被拆开。
聚合Repository
是应用程序的命令端,您可以在其中请求执行操作。
因此,它不提供聚合列表,因为命令是对 a 聚合的意图表达。因此,它只需要Repository
用户检索一个聚合或创建一个聚合。
您需要的聚合列表示例是您的应用程序的查询端。 查询方(您的视图/实体)通常基于事件(通过事件源)进行更新。 对于您在应用程序中的任何查询要求,您通常会根据需要引入单独的视图。
在您的示例中,这意味着您将引入事件处理组件,侦听您的聚合事件,该事件使用聚合的查询模型更新存储库。
答案 1 :(得分:0)
传递到EventStore
的{{1}}实现了EventSourcingRepository
,这是一种获取聚合的方法。
尽管使用事件处理组件的框架方式可能会更好地扩展(取决于其使用方式/上下文),但我很确定事件处理组件还是由StreamableMessageSource<M extends Message<?>>
驱动的。因此,如果我们想跳过框架而只是介入,可以这样做:
StreamableMessageSource<M extends Message<?>>