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

时间:2016-02-09 16:10:34

标签: c# design-patterns windows-services domain-driven-design architectural-patterns

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

理想情况下,我希望在“日期”过期时实时创建域事件 - 但是我没有任何触发器可以在代码中使用它来执行此操作。我现在只能看到一种类型的模式 - 即每小时轮询一次Windows服务(例如使用Topshelf / Quartz),使用Product存储库拉回所有记录然后代码检查是否或者日期是否过期,符合标准。如果成功,将触发域事件并创建任务。

你可以想象,我不是特别喜欢这个。它不是实时的,我正在撤回大量数据以实现相对简单的事情。我在这里错过了一招吗?某种状态机/工作流程?在这种情况下,我可以使用哪些架构模式/优秀设计?

如果问题有点模糊,我会道歉,并且我会尝试澄清是否需要。

1 个答案:

答案 0 :(得分:1)

如果您使用像Quartz这样复杂的调度程序,为什么不在任务过期的时间使用它来回调您的应用程序呢?我从未以这种方式使用过Quartz,但我认为这应该是可能的。

要获得强大的解决方案,除了准时回调之外,您可能还需要考虑定期检查,但我希望这些常规检查可以在低频率下运行。

在任何情况下,当您收到回调时,您需要检查哪些任务确实是过期的。如果轮询数据库进行此检查是一个性能问题(在大多数情况下我不希望这样做),您可以随时缓存即将到来的截止日期。确保正确刷新缓存,例如通过听取“任务发布”域名事件。