Cqrs 开发工作流程、重构和;工具

Cqrs 开发工作流程、重构和;工具,cqrs,neventstore,Cqrs,Neventstore,当使用经典的“当前状态”持久性时,我们可能会向实体添加一个新属性。例如,在使用Blog有许多帖子的场景中,我们可能会向帖子实体添加一个“Rating”属性。我们希望将额定值默认为3,因此当我们在DB中添加一列时,默认值设置为3 在CQRS中,我已经了解到处理此问题的一个策略是在构造函数中设置默认值(评级=3),因此,当从事件中重播时,默认值将可用,除非存在更改评级值的显式事件。这似乎不是一个很棒的解决方案,因为没有创建事件,因此读取模型(或其他进程管理器/BCS)不会考虑默认值。(这里可能是错的

当使用经典的“当前状态”持久性时,我们可能会向实体添加一个新属性。例如,在使用Blog有许多帖子的场景中,我们可能会向帖子实体添加一个“Rating”属性。我们希望将额定值默认为3,因此当我们在DB中添加一列时,默认值设置为3

在CQRS中,我已经了解到处理此问题的一个策略是在构造函数中设置默认值(评级=3),因此,当从事件中重播时,默认值将可用,除非存在更改评级值的显式事件。这似乎不是一个很棒的解决方案,因为没有创建事件,因此读取模型(或其他进程管理器/BCS)不会考虑默认值。(这里可能是错的?)

因此,当一个新属性添加到聚合中时,应该在该聚合类型的每个“实例”上发出一个命令,设置默认值,从而创建所需的事件,从而更新读取模型,其他进程/BC可以使用和处理事件,这似乎是合乎逻辑的。也许我在这件事上走得太远了

我没有找到很多关于NEventStore工具的信息,所以我想知道正在使用什么策略?

我能想到的一个策略是,需要为每个“发布”创建一个一次性可执行文件/脚本,它将:

  • 获取给定类型的所有聚合的列表
  • 在每个实例上执行一个命令,为新属性设置默认值,从而创建更新读取模型所需的事件
  • 另一种策略可能是在读取模型进行重构以包含新属性时,在读取模型中设置默认值。但是,这无助于其他可能希望了解默认值的进程或BC

    如果可以为给定聚合类型的所有流“制造”事件,那么通用工具将非常有用

    其他人使用什么策略来处理域的此类更改?

    关于#1-我不认为EventStore中有GetAllStreams功能,也不认为可以将StreamId映射到聚合类型,因此我认为获取给定类型的所有聚合(流ID)的唯一方法是从读取模型中进行查询?。如果要创建一个“通用工具”来帮助实现这一点,那么该工具需要了解读取模型模式,以便获得流ID列表,这将大大降低它的“通用性”