【问题标题】:Creating domain events only for the purpose of making the projection logic less complex仅为了降低投影逻辑复杂性而创建领域事件
【发布时间】:2021-02-02 06:32:55
【问题描述】:

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

简单示例:

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

OrderAccepted(orderId)

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

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

【问题讨论】:

    标签: domain-driven-design cqrs event-sourcing


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 2021-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多