2014-01-19 25 views
1

我曾在許多PHP框架中看到過使用「事件管理器」類。 「正常」MVC框架範圍內的事件管理器究竟是什麼,它對整個應用程序提供了什麼?PHP - 什麼是事件管理器?

回答

1

先了解一下read about event driven programming的基本思路。

我認爲你標記的每個框架都有一個關於事件系統的手冊頁。至少CakePHP has a pretty detailed one關於它的事件系統,它是event manager。它的描述已經是解釋什麼事件管理是成功的一半:

事件管理器是負責跟蹤事件偵聽器, 正確的數據傳遞給他們,併發射它們在正確的 順序,當相關的事件被觸發時。您可以創建多個此對象的 實例來管理本地事件或保留單個實例並將其傳遞給您,以管理您應用中的所有事件。

事件管理器可以附加監聽器或接收器,偵聽或「連接」到事件的對象。當事件被事件管理器觸發並分派時,所有註冊到一個或多個事件的偵聽器都將收到事件對象實例並可以使用它。

小心事件正確使用他們是偉大的,不當使用它們可以讓你的應用程序難以調試,很難理解的混亂。不要僅僅因爲它們很酷就使用它們,請在應用程序中記錄事件。

Here is an example of how to inject additional fields into a form使用CakePHP事件系統。這個用例可能適合CMS,或者你必須通過插件系統有條件地添加某個表單。

1

通常,事件管理器允許應用程序的各個部分知道操作。

假設我有一個支付提供商模塊。付款提供商呼叫私人網址以返回付款狀態。一旦我驗證了付款的狀態,我就會發起一個事件來指示已付款。

負責處理交易客戶端的代碼可以監聽這些事件,例如發送客戶已付款的電子郵件並生成發票。

1

簡而言之,事件管理器提供了一種在應用程序中存儲事件的方式,提供事件驅動的編程。您可以利用已註冊的事件來開發監聽它們並作出相應反應的功能。正確使用時,事件管理器可幫助解耦代碼並使其更加精簡,並且更易於重用。

例如,假設您爲客戶編寫了一個博客模塊,它允許您管理簡單的帖子。如果您在發佈帖子時需要發送推文,您可以註冊發佈帖子時觸發的事件,然後編寫監聽該事件的流程併發送推文。這兩個過程都不​​需要知道其他過程,因爲從邏輯上講,這不是必需的。兩者都可以單獨開發和測試,但可以一起使用。