首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在cqrs中更改读取模型?

如何在cqrs中更改读取模型?
EN

Stack Overflow用户
提问于 2021-06-10 20:29:54
回答 1查看 41关注 0票数 0

我是cqrs用户的新手。

我有活动在

代码语言:javascript
复制
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个事件:

代码语言:javascript
复制
{id:1,user:yumi,age:21 ...}

readmodel中的1行

2 readmodel中的事件:

代码语言:javascript
复制
{id:1,user:yumi,age:21 ...}
{id:1,user:yumi,age:25 ...}

readmodel中的2行

3 readmodel中的事件:

代码语言:javascript
复制
{id:1,user:yumi,age:21 ...}
{id:1,user:yumi,age:25 ...}

readmodel中的{} 3行

或者只更新只读模型??

第二种情况:

代码语言:javascript
复制
{id:1,user:yumi,age:21 ...}
-> 
{id:1,user:yumi,age:25 ...}
->
{}

我对这个问题感到非常困惑。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2021-06-17 20:10:55

请注意,您的事件总是与某个具有ID的DDD聚合相关,因此在您的事件表中应该有一个aggregateID列。

答案取决于您希望在read模型中包含什么内容。例如,如果你想让一些成员表中的每个成员占一行,那么在伪代码中,我会这样做:

代码语言:javascript
复制
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表,那么您只需要添加一行关于每个事件发生了什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67921169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档