Domain driven design 将来发生的域事件

Domain driven design 将来发生的域事件,domain-driven-design,domain-events,Domain Driven Design,Domain Events,一个有限的上下文是否应该负责为未来的事物引发事件 考虑一个人有一组工作的场景。一份工作可以在将来结束。域将在结束日期添加到作业时引发“JobEndScheduled”事件。域是否应该在作业实际结束时引发“JobEnded”事件 我很想得到社区对此的反馈,因为这一定是一个常见的问题。我在DDD的任何一本书中都看不到这方面的内容。我对答案有一个清晰的看法,但在这一点上我不想影响任何答案 非常感谢 注意:上周我问了一个类似的问题,但我太关注命名方面,而不是实际事件本身。我希望这个问题更清楚 考虑一个人

一个有限的上下文是否应该负责为未来的事物引发事件

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

我很想得到社区对此的反馈,因为这一定是一个常见的问题。我在DDD的任何一本书中都看不到这方面的内容。我对答案有一个清晰的看法,但在这一点上我不想影响任何答案

非常感谢

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

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

这取决于——记录工作实际结束是否有业务价值

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

考虑到银行业务——当您查看您的交易历史时,各种转账通常处于“待定”状态;该模型预计会发生一些事情,但它确实发生的证据还没有出现

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

在person/jobs示例中,这只是因为时间已过

时间不会流逝——输入中的时间;你看这个主意怎么样

<代码>如果你不认为时间是一个输入值,想想看,直到你做了——这是一个重要的概念。< /代码>

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

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

这就是谷歌日历的工作方式——你可以回头看看过去日历上的内容

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

这取决于——记录工作实际结束是否有业务价值

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

考虑到银行业务——当您查看您的交易历史时,各种转账通常处于“待定”状态;该模型预计会发生一些事情,但它确实发生的证据还没有出现

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

在person/jobs示例中,这只是因为时间已过

时间不会流逝——输入中的时间;你看这个主意怎么样

<代码>如果你不认为时间是一个输入值,想想看,直到你做了——这是一个重要的概念。< /代码>

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

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


这就是谷歌日历的工作方式——你可以回头看看过去日历上的内容。

首先,感谢你的快速回复。那么在您给出的示例中,是什么将事务从“挂起”更改为“完成”。我认为有一些来自外部党派的刺激。在person/jobs示例中,这只是因为时间已过。因此,在某种意义上,源域中没有明确的事件或“JobEnded”概念。源BC对作业结束点不感兴趣,但其他BC感兴趣(例如,他们可能需要删除此人的银行详细信息,因为他们不再被允许持有这些信息)。如果您确定作业结束只是因为时间已过而发生。然后将jobEndDate信息添加到JobCreated事件中。任何对这些信息感兴趣的人都会关注这一事件。我倾向于同意你的观点,穆罕默德。另一种选择是,源绑定上下文“制造”它不感兴趣的事件。这对我来说似乎是错误的,但这只是我的观点。首先,谢谢你的快速回复。那么在您给出的示例中,是什么将事务从“挂起”更改为“完成”。我认为有一些来自外部党派的刺激。在person/jobs示例中,这只是因为时间已过。因此,在某种意义上,源域中没有明确的事件或“JobEnded”概念。源BC对作业结束点不感兴趣,但其他BC感兴趣(例如,他们可能需要删除p