考虑一个人有一组工作的场景。将来可以结束工作。域将在将结束日期添加到作业时引发“JobEndScheduled”事件。域是否也应该在工作实际结束时引发“JobEnded”事件?
这取决于 - 记录工作实际结束是否有商业价值?
在许多领域,答案是肯定的:计划中的某事的事实与某事发生的事实是不同的知识。对这两个事实进行显式建模会使领域的其他部分变得更容易。
考虑银行业务 - 当您查看交易历史时,通常各种转账都处于“待处理”状态;该模型预计会发生某些事情,但尚未出现证明它确实发生的证据。
通常情况下,这两个事件会有不同的权限——调度程序和执行程序(这些概念可能潜伏在任何名称下)。
在人员/工作示例中,这只是因为时间已经过去而发生。
时间不会流逝——输入中的时间;看到约翰卡马克的这个想法
If you don't consider time an input value, think about it until you do -- it is an important concept.
域模型不控制时间——现实世界控制时间,也许你有一种机制可以告诉域模型时间是什么(更准确地说,一些参考时钟的测量值是多少)。
因此,例如,如果我们需要查看特定时间窗口内的计划,我们可能会将该时间窗口的范围作为查询的一部分传递,并获取落在该窗口内的计划项目列表。
这就是 Google 日历的工作方式——您可以返回查看过去日历上的内容。