消息总线服务在领域驱动设计中的位置
Where does the message bus service live in Domain Driven Design
我正在努力加深对 DDD 的理解。更具体地说,如何通过异步处理的消息总线处理域事件。
假设我有一些架构 ->
_____________________
| |
| Client |
|_____________________|
|
__________|__________
| |
| Application Service |
|_____________________|
|
__________|__________
| |
| Domain |
|_____________________|
当我的域引发一些域事件时,我如何获得该事件
到 RabbitMQ 等消息服务?
我的第一个想法是注入一个消息总线服务,IMessageBus,
知道如何将事件发送到 RabbitMQ。该服务将被使用
由域事件处理程序将事件分派到总线。
但后来我想,现在我的域必须知道如何处理它自己的事件。
有人可以解释一下这件事吗?
服务总线是基础设施的一部分,但应用程序服务知道它(作为抽象)。将总线注入到应用服务中是可以的,因为应用服务不包含域逻辑,而是充当业务用例的协调者和宿主。
But then I thought, now my domain has to know how to handle its own events.
是的,但是总线只传递消息,消息处理程序基本上是应用程序服务。
Rabbit 和其他是实现细节,您的应用程序处理程序应该由服务总线调用(它应该抽象实际的消息传递过程)。
这个问题类似于 "how does your domain communicate with an external system (other than for data persistence)"?
服务总线与物理传感器或其他外部硬件没有区别。人们通常将代码中的那些物理事物表示为抽象物理概念的对象。它们在问题域 (PD) 之外,可以被视为系统集成 (SI) 对象。
如果您的域需要与外部系统通信,它只需调用其等效的 SI 对象即可。同样,SI 对象可以调用您的域。
注意:此答案假定您的域没有贫血。
我正在努力加深对 DDD 的理解。更具体地说,如何通过异步处理的消息总线处理域事件。
假设我有一些架构 ->
_____________________
| |
| Client |
|_____________________|
|
__________|__________
| |
| Application Service |
|_____________________|
|
__________|__________
| |
| Domain |
|_____________________|
当我的域引发一些域事件时,我如何获得该事件 到 RabbitMQ 等消息服务?
我的第一个想法是注入一个消息总线服务,IMessageBus, 知道如何将事件发送到 RabbitMQ。该服务将被使用 由域事件处理程序将事件分派到总线。
但后来我想,现在我的域必须知道如何处理它自己的事件。
有人可以解释一下这件事吗?
服务总线是基础设施的一部分,但应用程序服务知道它(作为抽象)。将总线注入到应用服务中是可以的,因为应用服务不包含域逻辑,而是充当业务用例的协调者和宿主。
But then I thought, now my domain has to know how to handle its own events.
是的,但是总线只传递消息,消息处理程序基本上是应用程序服务。
Rabbit 和其他是实现细节,您的应用程序处理程序应该由服务总线调用(它应该抽象实际的消息传递过程)。
这个问题类似于 "how does your domain communicate with an external system (other than for data persistence)"?
服务总线与物理传感器或其他外部硬件没有区别。人们通常将代码中的那些物理事物表示为抽象物理概念的对象。它们在问题域 (PD) 之外,可以被视为系统集成 (SI) 对象。
如果您的域需要与外部系统通信,它只需调用其等效的 SI 对象即可。同样,SI 对象可以调用您的域。
注意:此答案假定您的域没有贫血。