我是cqrs用户的新手。
我有活动在
id agg event payload time
1 member MemberCreated {id:1,user:yumi,age:21 ...} 2021-06-10
2 member MemberUpdated {id:1,user:yumi,age:25 ...} 2021-06-10
3 member MemberDeleted {} 2021-06-11而且,我的要求是
基于上面的事件1-3,读取模型是如何改变的?
第一个场景:
readmodel中的1个事件:
{id:1,user:yumi,age:21 ...}readmodel中的1行
2 readmodel中的事件:
{id:1,user:yumi,age:21 ...}
{id:1,user:yumi,age:25 ...}readmodel中的2行
3 readmodel中的事件:
{id:1,user:yumi,age:21 ...}
{id:1,user:yumi,age:25 ...}readmodel中的{} 3行
或者只更新只读模型??
第二种情况:
{id:1,user:yumi,age:21 ...}
->
{id:1,user:yumi,age:25 ...}
->
{}我对这个问题感到非常困惑。任何帮助都将不胜感激。
发布于 2021-06-17 20:10:55
请注意,您的事件总是与某个具有ID的DDD聚合相关,因此在您的事件表中应该有一个aggregateID列。
答案取决于您希望在read模型中包含什么内容。例如,如果你想让一些成员表中的每个成员占一行,那么在伪代码中,我会这样做:
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, {
id: event.aggregateID,
user: e.payload.user,
age: e.payload.age}
)
break
case MemberDeleted:
db.Delete(Members, {id: event.aggregateID})
break
}但是,如果您想要有一些具有成员数量的MemberCount表,您可以在MemberCreated上递增它,在MemberDeleted上递减它。
如果您想要有一个AuditLog表,那么您只需要添加一行关于每个事件发生了什么。
https://stackoverflow.com/questions/67921169
复制相似问题