【问题标题】:Structure for a Actions Engine动作引擎的结构
【发布时间】:2014-01-17 11:49:55
【问题描述】:

我正在做一个需要基本动作引擎的项目,以便某些函数可以绑定到某些事件,而其他函数可以调用某些事件。就像 Wordpress Hooks 系统(除了没有过滤器)。

我知道我可以复制 Wordpress,但我想澄清一下想法。这个项目将变得相当大,目前将包含大约 1200 个事件和 2000 多个与这些事件绑定的回调,而且这些数字只会增长。那么,最好(就性能而言):

一)

拥有一个带有静态函数/一组自己的函数的类,它将充当所有这些绑定的存储库,并且是此功能的唯一接口

B)

要构建一个包含函数的类,但是当应用程序要绑定函数或调用事件时,他们需要访问(可能包含在全局注册表中,尚未决定)包含特定事件的实例化事件对象,根据使用的实例。

所以,我的问题是,B 的性能会更好(通过将事件分成更小的组),还是A 在这种情况下就足够了?

【问题讨论】:

    标签: php performance events callback


    【解决方案1】:

    嗯,这两种策略需要考虑的不止一件事。

    A)据我所知,如果您在 B 中使用一些数组结构来查找事件,则其性能将优于 B,但维护和扩展会更加复杂,因为您需要在类中编写所有内容那将是巨大的

    B) 性能可能会降低,但作为事件引擎更易于使用和扩展。

    我相信实现的最佳选择是使用 B 作为一种事件调度器模式。看这个要点https://gist.github.com/nunomazer/8472389,代码来自这篇文章http://www.cainsvault.com/design-pattern-php-event-dispatcher/。它实现了一个基于观察者模式的简单事件管理器。

    但如果我使用事件管理器,我可能会考虑框架中的一个,例如 Symfony Event Dispatcher 组件,它已准备好并允许您将其用作项目中的库。

    【讨论】:

    • 好吧,A 和 B 都将以$_bindings[$eventName] 的形式将绑定存储在数组结构中,这是一个包含所有回调(及其优先级)列表的嵌套数组。我最初并没有考虑将每个 Event 声明为它自己的类,但这可能会更好,以便在执行运行中,只需要相关的处理程序类。但这看起来很棒,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多