如何解决如何更改 cqrs 中的读取模型?
我是 cqrs 用户的新手。
我有活动
id agg event payload time
1 member MemberCreated {id:1,user:yumi,age:21 ...} 2021-06-10
2 member MemberUpdated {id:1,age:25 ...} 2021-06-10
3 member MemberDeleted {} 2021-06-11
而且,我的要求是
读取模型如何根据上述事件 1-3 发生变化?
第一个场景:
readmodel 中有 1 个事件:
{id:1,age:21 ...}
readmodel 中的 1 行
readmodel 中的 2 个事件:
{id:1,age:21 ...}
{id:1,age:25 ...}
readmodel 中的 2 行
readmodel 中的 3 个事件:
{id:1,age:25 ...}
{} readmodel 中的 3 行
或只更新读取模型??
第二种情况:
{id:1,age:21 ...}
->
{id:1,age:25 ...}
->
{}
我对这个问题很困惑。任何帮助将不胜感激。
解决方法
请注意,您的事件始终与具有 ID 的某个 DDD 聚合相关,因此您的事件表中应该有一个聚合 ID 列。
答案取决于您希望在读取模型中包含什么内容。例如,如果你想有一些成员表,每个成员都有一行,那么在伪代码中我会这样做:
switch(e.event) {
case MemberCreated:
db.Insert(Members,{
id: event.aggregateID,user: e.payload.user,age: e.payload.age}
)
break
case MemberUpdated:
db.Update(Members,age: e.payload.age}
)
break
case MemberDeleted:
db.Delete(Members,{id: event.aggregateID})
break
}
但是如果您想要一些包含成员数量的 MemberCount 表,您可以在 MemberCreated 上增加它并在 MemberDeleted 上减少它。
如果您想要一个 AuditLog 表,那么您只需添加一行关于每个事件发生的情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。