2012-03-21 50 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编程范式。

相关问题