首页 > 解决方案 > 仅为了降低投影逻辑的复杂性而创建领域事件

问题描述

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

简单的例子:

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

OrderAccepted(orderId)

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

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

标签: domain-driven-designcqrsevent-sourcing

解决方案


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

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

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

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


推荐阅读