domain-driven-design - 仅为了降低投影逻辑的复杂性而创建领域事件
问题描述
在事件源系统中,我很好奇人们在引入额外事件或扩展事件时的想法,只是为了降低投影逻辑的复杂性。我必须管理它感觉有点不对劲。
简单的例子:
OrderPlaced(orderId, orderLines) where OrderLine(lineId, productId, price)
OrderAccepted(orderId)
如果我想要一个预测来总结每种产品的所有价格 - 但仅限于已接受的订单。因此,如果我选择扩展(或引入新)事件的方法,例如,我需要扩展 OrderAccepted 以便它添加订单行。如果我选择不扩展 OrderAccepted,则投影将需要保留特定产品的所有已下订单行。
请记住,这是一个简单的示例 - 手头的实际问题更复杂。我觉得最后一种方法是可行的方法-但希望对此有所了解:)
解决方案
如果我们从单一责任的角度来看,事件的责任是什么?它是携带有关发生的事情的信息。如果OrderPlaced
我们通知相关方系统中出现了新订单,我们Order
会在事件中提供其本身。
如果OrderAccepted
我们通知带有 ID 的订单已被接受。在这种情况下,订单行没有发生任何事情,因此它们不是事件的一部分,我们不需要包括它们。这使得事件历史具有可读性和可理解性。
它还将为您提供一种从事件中投影当前实体状态的一致方式 - 每个事件仅包含对实体的更改。
我同意你的观点,即投影应该计算它需要什么而不扩展事件。
推荐阅读
- ns-3 - 断言失败 ipv4-l3-protocol.cc
- c# - 是否有一个函数可以在 C# 的组合框中剪切多个相同的值
- aframe - Aframe中如何区分鼠标点击事件和courser点击事件
- node.js - NodeJS 错误出现“找不到正文解析器”
- reactjs - 当我在 Iphone 6+ 上运行的 react-native 上指定边框半径时,如何删除在视图末尾出现的灰色区域?
- javascript - DOMException:无法在“文档”上执行“querySelector”:
- python-3.x - 如何修复“Bot 对象没有属性 logs_from”
- c# - 使用 p12 密钥进行身份验证给出错误用户无法访问帐户
- python - 如何使用 python 修复 DAT 文件问题(二进制类型)?
- android - 如何在 Autocomplete Places _ Places API 中获取城市和州名