2014-01-17 32 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