DDD:单一应用程序中的域事件实现

时间:2016-03-30 19:57:43

标签: domain-driven-design aggregateroot bounded-contexts domain-events

我对域事件进行了一些小型研究,并找到了几个不同的解决方案

问题:

  • 哪一个是纯域事件?
  • 是否可以将它们全部放在同一个项目中?
  • 在这种情况下,我应该如何命名和区分它们?
  • 在哪里注册EventHandler?有人提到应用程序服务是合适的地方,但here我已经看到它已经注册到域模型中,并在那里处理,而不是在单独的事件处理程序类中。

还有一个额外的问题。

例如:创建和支付订单时,必须获得状态" OrderPaid"。

因为购买和订购是两个不同的上下文,所以在订单创建之后我们需要提升一个域事件,这应该由购买有界上下文中的事件处理程序处理,但是在事件处理的结果中,应该再增加一个域事件 - OrderPaid,可能再次由Order上下文处理。使用monolith应用程序,似乎一个解决方案可能是:将Order对象传递给事件处理程序以实现预期的行为。在这种架构风格中,还有其他方法可以解决它吗?

1 个答案:

答案 0 :(得分:1)

发明域事件是为了提供更加封装的域模型。没有纯粹的实现,只是不同的实现有不同的权衡。您可以将您的活动放在同一个项目中,并且在您引用的文章中对事件的命名有很多指导。

如果您希望处理在不同有界上下文之间最终一致的长时间运行进程,我可能会考虑使用共享消息总线,如NServiceBusMassTransit