CQRS:在没有事件源的情况下更新读取模型

CQRS: Update Read-Model without Event Sourcing

我们已经构建了一个基于 CQRS 的系统,在域端使用关系数据库,在读取端使用 NoSQL 数据库。域端遵循 class 逻辑关系方法,而读取端是非规范化的。 数据复制和转换是使用命令处理程序发出的事件完成的。

我有两个关于读端同步的问题:

_

interface IReadModelBuilder<TEntity>
{
    //// Returns a sequence of events which replicate the read-model 
    //// when executed by the event handlers.
    Event[] GetReplicationSequence(TEntity instance);
}

更新结束

_

如果您不保留事件(即不使用 Event sourcing),那么您将无法轻松重建 read-model。您的 Rebuilder 必须以某种方式尝试对写入模型进行逆向工程并制造一些奇怪的事件,因为 write model 甚至无法包含所有信息,因为它不需要这些信息来完成他的工作。

所以,我的结论是,如果没有 event store 或至少没有 event log,那么您将无法重建 read-model。如果你有这样的真实来源,那么你可以重建它,甚至可以通过在某种持久性中使用所有已处理事件 ID 的列表来检测不同步的情况。