首页 > 解决方案 > @Service 注入聚合?

问题描述

我有一个Order包含以下命令的聚合:

PlaceOrderCommand是指将其放置到Order外部执行场所。我已经捕获了在单独的(非 CQRS)中向外部执行场所下订单的行为@Service。然而,我正在努力(由于缺乏使用 Axon 的经验)如何最好地将我@Service与聚合体联系起来。

我的正常思维方式会让我:

我的问题是:

我可能考虑的另一件事是:

您能否建议对这种情况进行建模的最佳实践是什么?

标签: domain-driven-designaxon

解决方案


PlaceOrderCommand 是指将订单放置到外部执行场所。

我假设将订单放置到外部执行场所意味着与外部系统进行交互。如果是,那么它不应该是您的域的一部分。在这种情况下,您需要提出一个Integration Event.

正如您所提到的,您可以从您的域中获得一个CommandProcessOrder。在其中Command,您可以更新您的Domain(例如,设置OrderStatusProcessing)并引发一个集成事件OrderArrived,然后由一个单独的进程处理该事件。

微软文档

集成事件的目的是将提交的事务和更新传播到其他子系统,无论它们是其他微服务、限界上下文还是外部应用程序。

集成事件必须基于多个微服务(其他限界上下文)甚至外部系统/应用程序之间的异步通信。

您可以将该集成事件作为Domain. 这是您@Service将被注射的地方。一旦成功处理了订单,您就可以广播名为 的集成事件OrderPlaced

现在,任何与下订单有关的订阅者都将订阅该事件。在您的情况下,您Domain有兴趣在下订单后更新状态。因此,您将在您SubscribeOrderPlaced事件中Domain更新Order.

希望能帮助到你。


推荐阅读