7

我正在努力加深对 DDD 的理解。更具体地说,如何通过消息总线处理域事件以进行异步处理。

可以说我有一些架构->

 _____________________
|                     |
|        Client       |
|_____________________|
           |
 __________|__________
|                     |
| Application Service |
|_____________________|
           |
 __________|__________
|                     |
|        Domain       |
|_____________________|

当我的域引发一些域事件时,如何将该事件发送到 RabbitMQ 等消息传递服务?

我的第一个想法是注入一个消息总线服务 IMessageBus,它知道如何将事件发送到 RabbitMQ。域事件处理程序将使用该服务将事件分派到总线。

但后来我想,现在我的域必须知道如何处理自己的事件。

有人可以对此事有所了解吗?

4

2 回答 2

5

服务总线是基础设施的一部分,但是应用程序服务知道它(作为抽象)。可以将总线注入到应用服务中,因为应用服务不包含域逻辑,而是充当业务用例的协调者和宿主。

但后来我想,现在我的域必须知道如何处理自己的事件。

是的,但是总线只传递消息,消息处理程序基本上是应用程序服务。

Rabbit 和其他人是一个实现细节,您的应用程序处理程序应该由服务总线调用(它应该抽象实际的消息传递过程)。

于 2016-04-10T21:32:13.060 回答
2

这个问题类似于“您的域如何与外部系统通信(除了数据持久性)”?

服务总线与物理传感器或其他外部硬件没有什么不同。人们通常将代码中的那些物理事物表示为抽象物理概念的对象。它们在问题域 (PD) 之外,可以被视为系统集成 (SI) 对象。

如果您的域需要与外部系统通信,它只需调用其等效的 SI 对象。同样,SI 对象可以调用您的域。

注意:此答案假设您的域没有贫血。

于 2016-04-12T06:18:06.850 回答