1

我正在處理一個用戶故事,通過該用戶故事爲用戶創建一個任務(實體),以便在日期過期並滿足其他條件時(在單獨的實體 - 讓我們說一個產品)。DDD中基於時間/日期的域事件的模式

理想情況下,當這個「日期」過期時,我希望實時創建域事件 - 但是在代碼中沒有任何觸發器可以使用。我目前只能看到一種類型的模式,即每個小時都有一個正在輪詢的windows服務(例如使用Topshelf/Quartz),使用Product存儲庫取回所有記錄,然後編碼以檢查是否或者不是日期過期並且符合標準。如果成功,域事件將被觸發並且任務將被創建。

正如你所想象的,我並不特別喜歡這個。這不是實時的,而且我拉回了大量數據以實現相對簡單的事情。我在這裏錯過了一招嗎?某種狀態機/工作流?在這種情況下,我可以利用哪些建築模式/好設計?

道歉,如果問題有點模糊,我會嘗試澄清是否需要。

回答

1

如果您使用像Quartz這樣複雜的調度程序,爲什麼不在使用過期的確切時間回調您的應用程序?我從來沒有以這種方式使用Quartz,但我認爲這應該是可能的。

爲了獲得可靠的解決方案,除了準時回調之外,您可能還需要考慮定期檢查,但我希望這些定期檢查可以低頻率運行。

在任何情況下,當您收到回叫時,您需要檢查哪些任務確實過期。如果輪詢數據庫進行此檢查是一個性能問題(我不希望它在大多數情況下),您可以隨時緩存即將到來的最後期限。確保適當刷新緩存,例如通過聽取「任務發佈」域名事件。

+0

感謝您的回覆 - 是的,這是一個很好的觀點,我可以探索這個領域;快速閱讀表明Quartz可以在其調度程序中管理數十萬個作業,並且通常可以很好地擴展。然而,我決定在我的情況下(現在),我將着眼於未來 - 對生成的任務進行約會,以便它們在到期時才能看到。如果所有額外的數據變得笨拙,那麼我會研究你的Quartz建議!謝謝! –