【问题标题】:Patterns for Time / Date based domain events in DDDDDD 中基于时间/日期的域事件的模式
【发布时间】:2016-05-19 17:09:52
【问题描述】:

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

理想情况下,我希望在此“日期”过期时实时创建域事件 - 但是我无法在代码中使用任何触发器来执行此操作。我目前只能真正看到一种要使用的模式 - 即拥有一个每小时轮询一次的 Windows 服务(例如使用 Topshelf / Quartz),使用产品存储库拉回所有记录,然后编写代码以检查是否日期是否过期且是否符合标准。如果成功,将触发领域事件并创建任务。

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复 - 是的,这很好,我可能会探索这个领域;快速阅读表明 Quartz 可以在其调度程序中管理数十万个作业,并且通常可以很好地扩展。但是,我已经决定,就我而言(目前),我将改为查看生成的任务的未来日期,以便它们仅在到期时才可见。如果所有额外的数据变得笨拙,那么我会研究您的 Quartz 建议!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 2021-04-13
    相关资源
    最近更新 更多