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



在事件源系统中,我很好奇当人们仅仅为了使投影逻辑不那么复杂而引入额外事件或扩展事件时,他们会怎么想。我得管理一下,感觉有点不对。

简单的例子:

OrderPlaced(orderId, orderLines) where OrderLine(lineId, productId, price)

OrderAccepted (orderId)

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

记住这是一个简单的例子——实际的问题要复杂得多。我觉得最后一种方法是要走的路-但希望对此有一些输入:)

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

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

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

我同意你的观点,计划应该在不扩展事件的情况下计算出它所需要的东西。

最新更新