开发工作流程,重构&工装

时间:2013-06-19 05:51:09

标签: cqrs neventstore

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

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

因此,似乎合乎逻辑的是,当一个新属性被添加到聚合时,应该在该聚合类型的每个“实例”上发出一个命令,设置默认值,然后创建所需的事件 - 阅读模型是更新和其他进程/ BC可以使用和处理事件。也许我已经离开这个了?

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

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

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

    一个通用工具很棒,可以为给定聚合类型的所有流“制造”事件。

    其他人使用哪些策略来处理域名更改?

    关于#1 - 我不相信有GetAllStreams&lt; TAggregate&GT; EventStore中的功能或者无论如何将StreamId映射到聚合类型,所以我看到获得给定类型的所有聚合(流ID)的唯一方法是从读取模型?进行查询。如果要创建一个“通用工具”来帮助解决这个问题,那么该工具需要具备读取模型模式的知识才能获得流ID的列表,这将使其更少“通用” < / p>

0 个答案:

没有答案