Axon 从聚合中删除引用项

Axon 从聚合中删除引用项,axon,Axon,我有一个关于以下情况的问题。假设我们有2个域和2个聚合。域A和域B是不同的微服务 域A-产品聚合 域B-商店聚合 在我们的设计中,我们决定域A不了解域B。在域B中,每个商店集合都有一个或多个产品(可销售商品)的参考 如果我们想要删除一个产品,那么我们可以向域a-product聚合发送一个RemoveProductCommand 如何处理店铺更新,从可销售商品列表中删除商品?我们希望以一种“事务性”的方式来实现这一点(如果它也从所有商店中删除,则仅标记为已删除) 我已经考虑过了,我看到了4种可能的

我有一个关于以下情况的问题。假设我们有2个域和2个聚合。域A和域B是不同的微服务

  • 域A-产品聚合
  • 域B-商店聚合
  • 在我们的设计中,我们决定域A不了解域B。在域B中,每个商店集合都有一个或多个产品(可销售商品)的参考

    如果我们想要删除一个产品,那么我们可以向域a-product聚合发送一个RemoveProductCommand

    如何处理店铺更新,从可销售商品列表中删除商品?我们希望以一种“事务性”的方式来实现这一点(如果它也从所有商店中删除,则仅标记为已删除)

    我已经考虑过了,我看到了4种可能的选择:

  • 在车间聚合中侦听ProductRemovedEvent,然后从车间中删除产品引用。接受这一理论可能导致产品无法移除且仍在商店销售清单上的情况

  • 在域a中创建一个传奇,首先从商店中移除物品,然后将产品标记为已移除。如果Saga处理失败,则应通过向已修改的车间聚合发送一些恢复命令来恢复所有车间状态。为了知道哪个商店引用了该产品,我们使用查询请求获取该信息

  • 与项目符号2相同,但也将店铺信息(id)存储在产品聚合(ProductListedShopList)中

  • 其他域/聚合定义(例如,合并它们)

  • 有什么建议可以解决这个问题吗?

    我支持选项2,但是:

    “A不了解域B”:选项二提升B是上游,A是下游(A取决于B,因为A向B发送命令,A订阅B的事件。这些命令和事件是B API的一部分),而不是相反。但是,这很好!A和B不是相互依赖的

    另外,我会考虑在域B中引入产品的概念,例如,Sudio产品。此聚合可以链接到您的商店,以确保B域模型中不变量的安全(类似于点编号3)。这将解耦您的受限上下文:ShopProduct是ShopBoundedContext如何理解这个
    Product
    概念的。这将使您能够仅将域模型B作为独立应用程序运行

    ProductRemovedEvent将使产品(域A)处于某种挂起状态,例如删除,此事件将触发Saga

    Saga将在产品(域A)和ShopProduct(域B)之间进行通信:

    • 接收到ProductRemovedEvent,并向车间模型发送命令
    • ProductRemovedFromAllShop成功地从Shop接收到,我们向Product发送命令,将状态更新为REMOVED
    • ProductRemovedFromAllShopsOn成功地从Shop接收到,我们向Product发送一个命令,将状态更新为某个错误状态或初始状态,以便进行补偿。
      • 我支持选项2,但:

        “A不了解域B”:选项二提升B是上游,A是下游(A取决于B,因为A向B发送命令,A订阅B的事件。这些命令和事件是B API的一部分),而不是相反。但是,这很好!A和B不是相互依赖的

        另外,我会考虑在域B中引入产品的概念,例如,Sudio产品。此聚合可以链接到您的商店,以确保B域模型中不变量的安全(类似于点编号3)。这将解耦您的受限上下文:ShopProduct是ShopBoundedContext如何理解这个
        Product
        概念的。这将使您能够仅将域模型B作为独立应用程序运行

        ProductRemovedEvent将使产品(域A)处于某种挂起状态,例如删除,此事件将触发Saga

        Saga将在产品(域A)和ShopProduct(域B)之间进行通信:

        • 接收到ProductRemovedEvent,并向车间模型发送命令
        • ProductRemovedFromAllShop成功地从Shop接收到,我们向Product发送命令,将状态更新为REMOVED
        • ProductRemovedFromAllShopsOn成功地从Shop接收到,我们向Product发送一个命令,将状态更新为某个错误状态或初始状态,以便进行补偿。

        我们当前的解决方案也是具有某些挂起状态的解决方案,该事件会触发等待产品移除的事件。谢谢你的建议。我将等待将这个答案标记为“接受”,因为我希望看到其他可能的解决方案。谢谢我们目前的解决方案是具有一些挂起状态的解决方案,以及触发等待产品移除的事件。谢谢你的建议。我将等待将这个答案标记为“接受”,因为我希望看到其他可能的解决方案。谢谢