【发布时间】:2018-05-30 12:59:29
【问题描述】:
我的应用程序使用 cqrs 和事件溯源。它已经在生产中。 现在我必须添加一个业务规则。我的业务规则在我的聚合根用户聚合中。
我的命令:
public class CallUserForMarketingPlanCommand
{
public Guid UserId {get;set;}
public DateTime CallDate {get;set;}
public Guid PlanId {get;set;}
}
public class AcceptMarketingPlanCommand
{
public Guid UserId {get;set;}
public Date AswerDate {get;set;}
public Guid PlanId {get;set;}
}
... the same thing for RefuseMarketingPlanCommand
这些命令应用于我的聚合根,生成存储在事件存储中的事件
现在如果在通话50天后,用户没有接听,则必须由接线员召回用户。为此,我认为生成事件 UserDoNotRepliedInDelayEvent 并使用它来投影到带有召回信息的读取模型。
我的解决方案是创建一个延迟命令(来自 UserCalledForMarketingPlanEvent 处理程序)CheckUserAnswerCommand,它检查调用日期并在必要时跨聚合生成 UserDoNotRepliedInDelayEvent。行。
我的问题是如何在我的事件存储中(在此更改之前)中的用户上延迟此命令?
编辑:
在不考虑延迟消息的情况下,如何更改影响聚合状态的业务规则(或业务规则参数)。简单的例子:
如果两次付款未执行,则禁用帐户。
此规则与第一次部署一起出现。好的,现在有 1000 个帐户被禁用。老板因为业务受到影响而更改规则,如果5次付款没有执行,则要禁用帐户。
如何启用未执行付款少于 5 次的帐户?
感谢您的帮助。
【问题讨论】:
标签: cqrs event-sourcing