Coc*_*sin 2 cqrs event-sourcing
如果我实现CQRS和事件源,那么假设数据的最终存储(读取存储)在RDBMS中,那么如何保持数据的完整性和一致性?
如果发布事件但由于违反检查或缺少FK引用而RDBMS拒绝从该事件派生的数据怎么办?
CQRS至少包含两个模型:写入和读取。两者都可以存储在同一数据库中或不同的数据库中。使用ES时,您使用的是事件存储,它本身可以在rdbms之上实现(.net中有NEventStore,afaik是否可以与许多数据库rdbms 一起使用)。
您是说您在rdbms中具有读取模型,这很棒。不需要强制执行任何操作,因为它是读取的模型,模型更新程序之外的任何人都无法触及。应用程序客户端只能查询该模型,而不能对其进行修改。这就是为什么首先要有2个模型的原因,以便Domain可以使用“ write”模型,而应用程序的其余部分可以使用“ read”模型。
同样,RDBMS不应真正拒绝任何东西。事件处理程序应该是幂等的,因此,例如,如果该处理程序插入的ID应该是唯一的东西,则第二次调用应仅忽略任何唯一约束冲突。使用CQRS,您正在使用RDBMS约束来支持幂等,而不是实施某些业务规则。
同样,将读取的模型视为“丢弃模型”,可以随时更改或重建它。
| 归档时间: |
|
| 查看次数: |
882 次 |
| 最近记录: |