有限的背景是否应该为将来过时的事情提出事件负责?
考虑Person拥有一组Jobs的场景。工作可以在将来结束。域将在结束日期添加到作业时引发“JobEndScheduled
”事件。域名是否应该在作业实际结束时引发“JobEnded
”事件?
我希望得到社群对此的反馈,因为它一定是一个常见的问题。在任何DDD书籍中我都看不出任何相关内容。我对答案有清晰的看法,但此时不想影响任何答案。
非常感谢...
注意:上周我问了一个类似的问题,但我过分关注命名方面而不是实际事件本身。我希望这个问题更清楚!
答案 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日历的工作方式 - 您可以回过头来查看过去日历上的内容。