使用经典的“当前状态”持久性时,我们可能会向实体添加新属性。例如,使用 Blog 有许多帖子方案,我们可能会向帖子实体添加“评级”属性。我们希望将Rating值默认为3,因此当我们在DB中添加一列时,默认值设置为3.
在CQRS中,我已经读过一个处理此问题的策略是在构造函数中设置默认值(Rating = 3),因此当从事件重放时,默认值将可用,除非存在更改评级值的显式事件。这对我来说似乎不是一个很好的解决方案,因为没有创建事件,因此读取模型(或其他流程管理器/ BC)将不会考虑默认值。 (这里可能有问题?)
因此,似乎合乎逻辑的是,当一个新属性被添加到聚合时,应该在该聚合类型的每个“实例”上发出一个命令,设置默认值,然后创建所需的事件 - 阅读模型是更新和其他进程/ BC可以使用和处理事件。也许我已经离开这个了?
我没有找到很多关于NEventStore工具的信息,所以我想知道正在使用什么策略?
我能想到的一个策略是需要为每个“发布”创建一个丢弃的可执行文件/脚本:
另一种策略可能是在重构包含新属性时在读取模型中设置默认值。但是,这对于可能想要了解默认值的其他进程或BC没有帮助。
一个通用工具很棒,可以为给定聚合类型的所有流“制造”事件。
其他人使用哪些策略来处理域名更改?
关于#1 - 我不相信有GetAllStreams&lt; TAggregate&GT; EventStore中的功能或者无论如何将StreamId映射到聚合类型,所以我看到获得给定类型的所有聚合(流ID)的唯一方法是从读取模型?进行查询。如果要创建一个“通用工具”来帮助解决这个问题,那么该工具需要具备读取模型模式的知识才能获得流ID的列表,这将使其更少“通用” < / p>