使用 Axon 4 处理外部合作伙伴时设计命令和事件
Design Commands And Events while Handling External partner with Axon 4
这是一个与使用 Axon 4 设计命令处理相关的问题。
假设我有一个对 Payment
概念建模的域。
实际付款将由外部合作伙伴完成。我想通过以下事件在我的系统中跟踪它:已发出付款请求,然后是
合作伙伴同意付款或合作伙伴拒绝付款。
命令发出的每个事件都应注册到同一个数据库事务中。
在 Axon 4 中实际呼叫我的合作伙伴的最佳做法是什么?
这是我到目前为止所做的:
- 有 一个命令 命名为
RequestPaymentCommand
- 此命令将由
Payment
聚合处理,如下所示:
- 做一些检查
- 应用事件
PaymentRequestWasIssued
- 然后,调用外部合作伙伴并根据结果应用
PaymentAccepted
或 PaymentRefused
,据说
All the data that you need to apply the event should normally be available in the command
考虑到这句话,我明白我应该创建与事件一样多的命令吗?但是在这种情况下,所有这些命令的意义何在?我应该以这样的方式结束吗:
- 我的命令
RequestPaymentCommand
将生成 PaymentRequestWasIssued
事件。
- 然后我从某个地方打电话给我的合作伙伴,然后发送 另一个 命令(如何命名?),该命令将根据合作伙伴的结果生成事件?
The actual payment will be done by an external Partner
这意味着您的应用程序不是真实的来源,它不应试图表现得像真实的那样。这意味着它应该只观察远程系统中发生的事情,并可能对远程事件做出反应。 "observe" 可能意味着 duplicate/copy 本地数据库中的远程事件,未经修改,仅出于缓存原因或显示原因。你的系统不应该直接对这些事件给出其他解释,而不是它们的来源给出的解释。
将远程事件复制到本地后,您的系统可以对其做出反应。这可能意味着 Saga 在收到 Partner Agreed the Payment
后会向本地聚合发送 UnlockFeature
命令(参见 DDD)。
With this statement in mind, I understand that I should create as much Commands as Events ? But In this case, what is the point of all theses commands ?
这表明那些不是你的事件:你不应该从你的代码中发出它们;在 最坏的 情况下,您存储它们并对它们做出反应(在 Saga/Process 管理器中)。这意味着您应该发现本地业务流程并对其建模:它们通过发送命令对事件做出反应。
这是一个与使用 Axon 4 设计命令处理相关的问题。
假设我有一个对 Payment
概念建模的域。
实际付款将由外部合作伙伴完成。我想通过以下事件在我的系统中跟踪它:已发出付款请求,然后是 合作伙伴同意付款或合作伙伴拒绝付款。
命令发出的每个事件都应注册到同一个数据库事务中。
在 Axon 4 中实际呼叫我的合作伙伴的最佳做法是什么?
这是我到目前为止所做的:
- 有 一个命令 命名为
RequestPaymentCommand
- 此命令将由
Payment
聚合处理,如下所示:- 做一些检查
- 应用事件
PaymentRequestWasIssued
- 然后,调用外部合作伙伴并根据结果应用
PaymentAccepted
或PaymentRefused
All the data that you need to apply the event should normally be available in the command
考虑到这句话,我明白我应该创建与事件一样多的命令吗?但是在这种情况下,所有这些命令的意义何在?我应该以这样的方式结束吗:
- 我的命令
RequestPaymentCommand
将生成PaymentRequestWasIssued
事件。 - 然后我从某个地方打电话给我的合作伙伴,然后发送 另一个 命令(如何命名?),该命令将根据合作伙伴的结果生成事件?
The actual payment will be done by an external Partner
这意味着您的应用程序不是真实的来源,它不应试图表现得像真实的那样。这意味着它应该只观察远程系统中发生的事情,并可能对远程事件做出反应。 "observe" 可能意味着 duplicate/copy 本地数据库中的远程事件,未经修改,仅出于缓存原因或显示原因。你的系统不应该直接对这些事件给出其他解释,而不是它们的来源给出的解释。
将远程事件复制到本地后,您的系统可以对其做出反应。这可能意味着 Saga 在收到 Partner Agreed the Payment
后会向本地聚合发送 UnlockFeature
命令(参见 DDD)。
With this statement in mind, I understand that I should create as much Commands as Events ? But In this case, what is the point of all theses commands ?
这表明那些不是你的事件:你不应该从你的代码中发出它们;在 最坏的 情况下,您存储它们并对它们做出反应(在 Saga/Process 管理器中)。这意味着您应该发现本地业务流程并对其建模:它们通过发送命令对事件做出反应。