代码之家  ›  专栏  ›  技术社区  ›  Maurice Kherlakian

基于聚合状态更改的聚合大容量更新

  •  1
  • Maurice Kherlakian  · 技术社区  · 6 年前

    我正在开发一个遵循ddd和cqrs原则的事件源应用程序,它允许发布广告来销售商品。

    有一个特定的不变量,我试图建模,似乎涉及到一个AR的大批量更新,我真的不知道如何去做。

    不变量如下:

    • 会员可以发布广告
    • 一个成员可能被管理员禁止
    • 如果会员被禁止,他的广告必须暂停

    为了讨论的目的,一个广告需要有一个状态,因为一个成员可以通过点击一个广告来购买一个项目,所以知道一个广告是否活跃是很重要的。

    我设计了我的聚合根:

    • 成员
    • 广告
    • 秩序

    根据上下文的不同,成员可以是买方或卖方,因此我根据需要装饰成员对象。

    当广告发布时,它们当然被插入到一个read模型中。

    现在,当一个成员被禁止时,有一个关联的事件由成员ar触发。 成员被禁止(成员ID)

    我的问题是如何找到会员拥有的每一个广告,并暂停它们?

    虽然我可以依赖会员身份进行购买交易,但重要的是,广告会跟踪其状态,因为还有其他类似的操作可能会触发向会员发送电子邮件,例如,表明其广告因此类原因而暂停。

    所以经过深思熟虑,我最好的方法是创建一个长时间运行的进程,在这个进程中,我为memberwasbindowed创建一个处理程序,然后在read模型中查找他的活动广告,并发出命令逐个挂起它们。

    我遗漏了什么吗?我想用一个流程管理器,但是我知道你不应该从一个pm访问read端。在任何情况下,PM在大多数情况下确定发送给一个AR的命令。

    我遗漏了什么吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Pedro Goes    6 年前

    如果你有一个消息传递机制,也许你可以“引爆” 会员被禁止 事件。

    发布 会员被禁止 (或等效)通过消息传递管道的事件,并从处理广告的上下文订阅该事件。当在消息传递机制中接收到该事件时,可以将其分解为多个 使失去知觉 事件也将通过您的消息系统发送,每个事件都针对被禁止成员的一个当前广告。

    然后,当消息传递机制处理这些事件时,它们中的每一个事件将只在单个聚合(每个ad,禁用它)上写入。

    同时,被禁止的用户将阻止进一步的广告被插入,所以你在这方面也将是安全的。