【发布时间】:2020-01-27 15:35:10
【问题描述】:
我有一个带有以下命令的 Order 聚合:
CreateOrderCommandPlaceOrderCommand- ...(其余部分与问题无关,因此已编辑)...
PlaceOrderCommand 是指将Order 放置在外部执行场所。我已经捕获了在单独的(非 CQRS)@Service 中将订单下达到外部执行场所的行为。但是,我正在努力(由于缺乏使用 Axon 的经验)如何最好地将我的 @Service 与聚合连接起来。
我的正常思维方式会影响我:
- 将
@Service注入聚合的@Autowired构造函数。 - 发出
PlaceOrderCommand时,使用该服务将订单下达到相关执行场所,完成后发出事件(OrderPlacedSuccessfullyEvent或ErrorInOrderPlacementEvent)。 - 在相关的
@EventSourcingHandler中更改聚合的状态。
我的问题是:
- 我上面关于如何使用 Axon 处理这个特定用例的描述是否有意义(特别是在聚合中注入
@Service对我来说感觉有点不对劲)? - 或者在将 CQRS/事件溯源与 Axon 结合使用时,是否有不同的最佳实践来模拟我的场景?
- Axon 在聚合中需要一个空的构造函数。这如何与
@Autowired构造函数相协调?
我可能考虑的另一件事是:
- 有一个
PlaceOrderInstructionCommand(而不是简单的PlaceOrderCommand),它发出一个单独的事件侦听器正在侦听的ReceivedPlaceOrderInstructionEvent。 - 该事件侦听器会将相关的
@Service注入其中,并放置Order。 - 然后在放置
Order之后,它会向聚合发送一个命令(或者它应该发出一个事件?),通知它更新其状态。
您能否建议对这种场景建模的最佳做法是什么?
【问题讨论】: