我正在尝试使用 dddd 实现事件源系统。目前,我正在为我的事件如何以及在何处跨越有界上下文的边界而苦苦挣扎。
想象有两个有界上下文:
- 产品管理
- 物流系统
产品管理拥有关于产品的所有知识。为简单起见,它只是“名称”。物流系统也有产品,但对它们的元数据一无所知。对他们来说,它主要是一个带有 ID 的物理盒子。但是当有人扫描这个产品时,他们也想显示名称。因此,ProductManagement BC 应该通知 Logistics BC,产品已注册并且名称已更改。因此,我将以 ProductManagement 中的事件结束,这些事件是从 ProductAggregate 内部引发的:
ProductManagement.Events.ProductRegistered
ProductManagement.Events.ProductNameChanged
当我正确理解这些是我将保存到事件存储中的事件。这些也是将发布到消息总线中的事件。所以在物流方面,我会订阅这些活动。到目前为止,一切都很好。
现在的问题是:我将如何在物流方面处理这个事件?Vaughn Vernon 在一次演讲中说,最好的做法是在应用层有一个事件处理程序,所以它基本上是一个应用程序服务。他还说,最好将其转换为一个或几个命令。我是否再次将所有收到的事件保存在物流端?我还要保存命令吗?如果出现问题,如何重现当前状态?或者我怎么知道,这不是接收限界上下文中处理的错误,而是错误的事件。如果我的转换命令被拒绝,我该怎么办?
我知道物流方面的总量没有计算或变化。但我认为这对我的问题并不重要。