1

我已經讀了很多關於事件驅動架構(EDA)設計模式,雖然它看起來非常強大(恕我看到漂亮嗎?)我感到困惑有兩件事:一是如何控制條件邏輯,二是如何控制異常。異常處理和狀態控制

比方說,我想設計一些公開的Ajax消費回調。回調將由前端用「用戶名」和「密碼」觸發,我將返回一個本地化的「返回代碼」,表示成功或失敗。

當用戶成功登錄時,讓我們假設我登錄它,發送管理和電子郵件,並開始會話。如果我是使用基於EDA模式,我可能有以下幾點:

用戶登錄 - >(事件分派,總是) - >(登錄,發送電子郵件,發起會話的所有調用)

也就是說,登錄回調將派發一些通知,發出監聽該特定事件的所有註冊類。我的問題是,誰確認if驗證器對(用戶名,密碼)是否成功?從某種意義上說,如果認證是正確的,這三個事件只有有效

所以,那麼也許我火了一個事件的第一,且僅當成功,極大地激發人:

用戶登錄 - >(事件分派,總是) - >嘗試,如果以用戶身份登錄(事件分派,成功) - >(登錄,發送電子郵件,開始會議全稱爲)

雖然這工作,我已經失去了如何獲得反饋控制。事件似乎遵循「一勞永逸」的思路;我怎樣才能將代碼返回到前端?也就是說,我看不到一個事件觀察員給主題提供反饋的方法。

這繼續異常處理;在這種情況下處理異常的最佳方法是什麼?

感謝您的任何建議! 阿德里安

(儘管它可能在理論意義不要緊,我試圖在此適用於PHP)

回答

1

EDA是偉大的,但它並不意味着你應該在任何情況下隨處使用。 EDA目的是提供脫鉤可擴展性並與權衡的沒有及時反饋和處理最終一致性來實現的。

而且至少在網絡應用程序,它是最好的,EDA作爲一個域事件結構來實現,即這些事件傳達相關領域(業務)成才發生。

你說得對,事件是一個「發射後不管」型,因爲他們表示,在過去的東西,發表讓其他有興趣的組件將被通知。但問題在於那些組件不瞭解其他組件或事件的來源。請記住,這一點是解耦。

用戶登錄和如不域行動,並實現它們的「老」的方式,它更容易和可維護性。雖然你想要一些解耦,但更多的是低層次而不是建築(高層)解耦。

+0

太好了,非常感謝Mike。我想我自己也得出了同樣的結論,這不是一種「一刀切」的模式。是否真的說將EDA重點僅限於業務領域稱爲域EDA? – AdrianGW

+0

這不叫任何東西。但是,如果你說域名事件模式的人明白你的意思。 – MikeSW

+0

太好了。謝謝你的幫助! – AdrianGW