将来发生的域事件

时间:2018-05-17 14:59:06

标签: domain-driven-design domain-events

有限的背景是否应该为将来过时的事情提出事件负责?

考虑Person拥有一组Jobs的场景。工作可以在将来结束。域将在结束日期添加到作业时引发“JobEndScheduled”事件。域名是否应该在作业实际结束时引发“JobEnded”事件?

我希望得到社群对此的反馈,因为它一定是一个常见的问题。在任何DDD书籍中我都看不出任何相关内容。我对答案有清晰的看法,但此时不想影响任何答案。

非常感谢...

注意:上周我问了一个类似的问题,但我过分关注命名方面而不是实际事件本身。我希望这个问题更清楚!

1 个答案:

答案 0 :(得分:1)

  

考虑Person拥有一组Jobs的场景。工作可以在将来结束。域将在结束日期添加到作业时引发“JobEndScheduled”事件。域名是否应该在作业实际结束时引发“JobEnded”事件?

这取决于 - 是否可以通过记录作业实际结束来获得商业价值?

在许多领域,答案是肯定的:计划某事的事实与事情发生的事实不同。对这两个事实进行明确建模可以使域的其他部分更容易。

考虑银行业务 - 当您查看交易历史记录时,通常各种转账处于“待定”状态;模型期望会发生某些事情,但发生的事实的证据尚未出现。

通常情况下,两个事件将有不同的权限 - 调度程序和执行程序(以这些概念可能隐藏的任何名称)。

  

在person / jobs示例中,这只是因为时间已经过去而发生。

时间没有过去 - 输入时间;通过John Carmack

看到这个想法

If you don't consider time an input value, think about it until you do -- it is an important concept.

域模型不控制时间 - 现实世界控制时间,也许你有一种机制来告诉域模型时间是什么(更准确地说,是某些参考时钟的测量值)。

因此,例如,如果我们需要在特定时间窗口期间查看计划,我们可能会将该时间窗口的范围作为查询的一部分传递,并返回属于该窗口的计划项目列表。

这就是Google日历的工作方式 - 您可以回过头来查看过去日历上的内容。