创建域事件只是为了使投影逻辑不那么复杂

Creating domain events only for the purpose of making the projection logic less complex

在事件源系统中,我很好奇人们在引入额外事件或扩展事件时的想法,只是为了使投影逻辑不那么复杂。我必须管理它感觉有点不对。

简单示例:

OrderPlaced(orderId, orderLines) 其中 OrderLine(lineId, productId, price)

已接受订单(orderId)

如果我想要一个预测来汇总每种产品的所有价格 - 但仅限于已接受的订单。因此,如果我选择扩展(或引入新的)事件的方法,我将需要扩展 OrderAccepted 以便它添加订单行。如果我选择不扩展 OrderAccepted,则投影需要保存特定产品的所有已下订单行。

请记住,这是一个简单的示例 - 手头的实际问题更为复杂。我觉得最后一种方法是可行的方法 - 但希望对此有一些意见:)

如果从单一责任的角度来看,事件的责任是什么?它是携带有关发生的事情的信息。 在 OrderPlaced 的情况下,我们会通知相关方系统中出现了新订单,并且我们会在事件中提供 Order 本身。

OrderAccepted 的情况下,我们通知带有 ID 的订单已被接受。在这种情况下,订单行没有发生任何变化,因此它们不是事件的一部分,我们不需要包括它们。这使得事件历史可读和理解。

它还会为您提供一种从事件中预测当前实体状态的一致方式 - 每个事件仅包含对实体的更改。

我同意你的观点,投影应该在不扩展事件的情况下计算它需要什么。