2012-03-21 49 views
2

我有一個應用程序,我想要實現以下系統。在代碼的某些關鍵的地方,我會如哪個OOP模式用於「觸發」應用程序事件

$event_handler->trigger('on_after_init'); 

此行將宣佈,初始化剛剛過完線。然後我想有一些隨機擴展/插件監聽這個和其他事件並執行他們想要的任何代碼。比如像plugins/after_init/...這樣的東西,你可以放一個類來執行。或者可能我會將它們保存在數據庫中,以便我可以根據需要調整訂單。

雖然我可以建立類似的東西,但我覺得這是一個經典的任務,並且存在一個標準模式。我不想發明自行車,如果真的如此,請告訴我相關信息。

謝謝!

+2

我會避免爲我在[這個答案]中列出的原因,觀察者模式(http://stackoverflow.com/questions/9776364/whats-the-proper-way-to-use-symfonys-eventdispatcher-component/ 9790350#9790350)。 Mediator模式或責任鏈通常對此類事物更好... – rdlowrey 2012-03-21 20:29:57

+2

此外,@ircmaxell最近發佈了[一個調查整個主題的博客](http://blog.ircmaxell.com/2012/03/handling -plugins-in-php.html),如果你需要澄清,他會在PHP聊天室中空閒。此外,冒着自我推銷的風險,這裏有一個[面向對象的中介模式實現](https://github.com/rdlowrey/Artax/blob/master/Core/src/Artax/Events/Mediator.php)如果你有興趣看到一個具體的例子,我最近放在一起。 – rdlowrey 2012-03-21 20:30:32

回答

0

prggmr提供了一個事件庫,用於觸發應用程序中的事件,實質上是在應用程序中「訂閱」並「激發」信號。

subscribe(function($event){ 
    echo "Do something here" 
}, 'on_after_init'); 

fire("on_after_init"); 

這可以寬鬆地被定義爲Observer pattern,雖然它是更不用說OOP設計圖案的多的Event Driven Programming編程範式。

相關問題