Syl*_*ain 4 cqrs event-sourcing axon
这是与使用Axon 4设计命令处理有关的问题。
假设我有一个模型可以模拟的概念Payment。
实际付款将由外部合作伙伴完成。我想通过以下事件在我的系统中进行跟踪:发出付款请求,然后由 合作伙伴同意付款或合作伙伴拒绝付款。
该命令发出的每个事件都应注册在同一数据库事务中。
在Axon 4中实际给我的伴侣打电话的最佳做法是什么?
到目前为止,这是我所做的:
RequestPaymentCommandPayment像这样的聚合来处理:
PaymentRequestWasIssuedPaymentAccepted还是PaymentRefused通常,在命令中应该可以应用事件所需的所有数据。
考虑到这一点,我知道我应该创建与事件一样多的命令?但是在这种情况下,所有这些命令的意义是什么?我是否应该得到类似以下的结果:
RequestPaymentCommand将生成PaymentRequestWasIssued事件。实际付款将由外部合作伙伴完成
这意味着您的应用程序不是真理的源头,并且不应尝试表现得像事实。这意味着它应该仅观察远程系统中正在发生的事情,并且可能会对远程事件做出反应。“观察”可能意味着仅出于缓存原因或出于显示原因而无需修改即可复制/复制本地数据库中的远程事件。您的系统不应直接对这些事件进行其他解释,除非其来源给出了解释。
在本地复制远程事件后,您的系统可以对它们做出反应。这可能意味着Saga在收到Saga之后Partner Agreed the Payment将UnlockFeature命令发送到本地Aggregate(请参见DDD)。
考虑到这一点,我知道我应该创建与事件一样多的命令?但是在这种情况下,所有这些命令的意义是什么?
这表明这些不是您的事件:您不应从代码中发出这些事件;在最坏的情况下,您将它们存储起来并对其做出反应(在Saga / Process Manager中)。这意味着您应该发现本地业务流程并对其进行建模:它们通过发送命令对事件做出反应。