0

有界上下文是否应该负责为未来过时的事物引发事件?

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

我很想得到社区对此的反馈,因为它一定是一个普遍的问题。我在任何 DDD 书籍中都看不到任何关于此的内容。我对答案有明确的看法,但在这一点上宁愿不影响任何答案。

非常感谢...

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

4

1 回答 1

2

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

这取决于 - 记录工作实际结束是否有商业价值?

在许多领域,答案是肯定的:计划中的某事的事实与某事发生的事实是不同的知识。对这两个事实进行显式建模会使领域的其他部分变得更容易。

考虑银行业务 - 当您查看交易历史时,通常各种转账都处于“待处理”状态;该模型预计会发生某些事情,但尚未出现证明它确实发生的证据。

通常情况下,这两个事件会有不同的权限——调度程序和执行程序(这些概念可能潜伏在任何名称下)。

在人员/工作示例中,这只是因为时间已经过去而发生。

时间不会流逝——输入中的时间;看到约翰卡马克的这个想法

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

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

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

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

于 2018-05-17T15:25:28.590 回答