DDD 中基于时间/日期的域事件的模式

Patterns for Time / Date based domain events in DDD

我正在处理一个用户故事,其中创建了一个任务(一个实体)供用户在日期过期且满足其他条件(在一个单独的实体上 - 假设一个产品)时处理。

理想情况下,我希望在 "Date" 过期时实时创建领域事件 - 但是我无法在代码中使用任何触发器来执行此操作。我现在只能真正看到一种模式可以使用——那就是有一个每小时轮询一次的 windows 服务(例如使用 Topshelf / Quartz),然后使用产品存储库拉回所有记录检查日期是否过期以及是否满足条件的代码。如果成功,将触发领域事件并创建任务。

如你所想,我不是特别喜欢这个。它不是实时的,我正在提取大量数据以实现相对简单的目标。我在这里错过了一个把戏吗?某种状态机/工作流程?在这种情况下,我可以使用哪些架构模式/好的设计?

如果问题有点含糊,我深表歉意,如果需要,我会尝试澄清。

如果您无论如何都使用像 Quartz 这样复杂的调度程序,为什么不直接使用它在任务过期的确切时间回调您的应用程序呢?我从未使用过quartz 是这样的,不过我觉得这个应该可以。

为了获得稳健的解决方案,除了按时回调之外,您可能还需要考虑定期检查,但我希望这些定期检查可以 运行 以低频率进行。

无论如何,当你收到回调时,你需要检查哪些任务是真正逾期的。如果为此检查轮询数据库是一个性能问题(我不认为在大多数情况下会出现这种情况),您始终可以缓存即将到来的截止日期。确保适当地刷新缓存,例如通过收听 "task published" 域事件。