2014-01-17 35 views
0

我正在開發一個需要基本動作引擎的項目,以便某些函數可以綁定到某些事件,而其他函數可以調用某些事件。就像Wordpress Hooks系統(除了沒有過濾器)。動作引擎的結構

我知道我可以複製Wordpress的一個,但我想得到一些想法的澄清。這個項目將會變得相當龐大,目前將包含大約1200個活動和2000多個回調,以約束這些事件,這些數字將只會增長。因此,這將是最好的(在性能方面):

A)

具有靜態功能的單一類/一組自己的功能,這將作爲倉庫所有這些綁定,並且是用於此功能

B)

爲了構建含有函數的類,但是當應用程序要綁定的函數,或呼叫的唯一的接口事件,他們需要訪問(可能包含在全局註冊表中,尚未決定)包含特定事件的實例化的Event對象,根據使用哪個實例。

所以,我的問題是,將B是更好的性能(通過瓜分事件成更小的羣體),或將A在這種情況下,是否足夠?

回答

1

好吧,在這兩種策略中有多種事情需要考慮。

A)對於我所理解的,如果您在B中使用某些數組結構來查找事件,那麼它的性能將優於B,但由於您需要在B)可能會變得不那麼具有表現力,但更容易使用和擴展爲事件引擎。

我相信實施的最佳選擇是使用B作爲一種事件分派器模式。看看這個要點https://gist.github.com/nunomazer/8472389,代碼是從這篇文章http://www.cainsvault.com/design-pattern-php-event-dispatcher/。它基於觀察者模式實現了一個簡單的事件管理器。

但是,如果我使用的是事件管理器,可能我會考慮一個來自框架的組件,例如Symfony Event Dispatcher組件已準備就緒,並允許您在項目中將它用作庫。

+0

好吧,A和B都會以'$ _bindings [$ eventName]'的形式將數組結構存儲在數組結構中,這是一個嵌套數組,其中包含所有回調(及其優先級)的列表。我最初並不想將每個Event都聲明爲自己的類,但是這可能會更好,因此在執行運行時,只需要相關的處理程序類。但是這看起來很棒,謝謝 – topherg