gpt4 book ai didi

cqrs - 在使用 Axon 4 处理外部合作伙伴的同时设计命令和事件

转载 作者:行者123 更新时间:2023-12-04 05:59:21 24 4
gpt4 key购买 nike

这是一个与使用 Axon 4 设计命令处理相关的问题。

假设我有一个域对 Payment 的概念进行建模.

实际付款将由外部合作伙伴完成。我想通过以下事件在我的系统中跟踪它:发出付款请求,然后是
合作伙伴同意付款或合作伙伴拒绝付款。

命令发出的每个事件都应注册到同一个数据库事务中。

在 Axon 4 中实际调用我的伙伴的最佳做法是什么?

这是我到目前为止所做的:

  • 一个命令 命名 RequestPaymentCommand
  • 此命令将由 Payment 处理像这样聚合:
  • 做一些检查
  • 申请事件PaymentRequestWasIssued
  • 然后,调用外部合作伙伴并给出结果,它将应用 PaymentAcceptedPaymentRefused

  • In this answer from stackoverflow ,据说

    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



    这意味着您的应用程序不是事实的来源,它不应该试图表现得像一个。这意味着它应该只观察远程系统中发生的事情并可能对远程事件使用react。 “观察”可能意味着复制/复制本地数据库中的远程事件,无需修改,仅出于缓存原因或出于显示原因。你的系统不应该直接对这些事件给出其他解释,除了它们的来源给出的解释。

    在本地复制远程事件后,您的系统可以对它们使用react。这可能意味着 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 ?



    这表明这些不是你的事件:你不应该从你的代码中发出它们;在最坏的情况下,您存储它们并对它们使用react(在 Saga/流程管理器中)。这意味着您应该发现本地业务流程并对它们进行建模:它们通过发送命令对事件使用react。

    关于cqrs - 在使用 Axon 4 处理外部合作伙伴的同时设计命令和事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54287285/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com