我按照DDD和CQRS原则开发了一个事件源应用程序,允许发布广告来销售商品。
我试图建模的一个特定的不变量似乎涉及AR的批量更新,而我真的不知道如何去做。
不变量就是这样:
出于讨论的目的,广告需要具有状态,因为会员可以通过点击广告来购买商品,因此了解广告是否有效非常重要。
我设计了我的聚合根源:
会员可以是买家或卖家,具体取决于具体情况,因此我会根据需要装饰会员对象。
发布广告时,它们当然会插入阅读模型中。
现在,当会员被禁止时,会员AR会触发与之相关的事件。 MemberWasBanned(MemberId)
我的问题是如何查找会员拥有的每个广告,并将其暂停?
虽然我可以依赖买家交易的会员身份,但广告跟踪其状态非常重要,因为还有其他类似的操作可能触发向该会员发送电子邮件,表明他的广告因此原因被暂停。
所以经过深思熟虑后我的最佳方法是创建一个长时间运行的进程,在其中我为MemberWasBanned创建一个处理程序,然后在读取模型中查找他的活动广告,并发出命令将它们逐个挂起
我错过了什么吗?我想过使用流程管理器,但是读到你不应该从PM访问读取端。在任何情况下,PM在大多数情况下确定发送到ONE AR的命令。
我错过了什么吗?
答案 0 :(得分:0)
如果您有消息传递机制,也许您可以“爆炸” MemberWasBanned 事件。
通过您的消息传递管道发布 MemberWasBanned (或等效)事件,并从处理广告的上下文订阅它。当您的消息传递机制收到此事件时,您可以将其分解为多个 DisableAd 事件,这些事件也将通过您的消息传递系统发送,每个事件都针对被禁止成员的一个当前广告。
然后,当消息传递机制处理这些事件时,每个事件都只会在单个聚合(每个广告,禁用它)上写入。
同时,被禁用户将阻止插入更多广告,因此您也可以安全地使用。