带有事件或挂钩的插件系统?
Plugin system with events or hooks?
我为 php 中的软件创建了一个插件系统。为了让插件改变程序的行为,我编写了这个(简化的)代码:
class PluginController {
/* ... */
public function addHook($name, $function, $priority = 10) {
/* store the function callback $function associated with $name */
}
public function executeHook($name, $args = array()) {
/* execute all function callbacks associated with $name
* in order of their priority and return their results */
}
}
因此插件可以使用 addHook
添加回调,并且在应用程序的某处通过调用 executeHook
来执行这些回调。
这很好用,但在阅读了一段时间有关该主题的内容后,我仍然不确定该技术是 event- 还是 hook- 系统。
一些消息来源说,差异与松耦合和紧耦合有关。
其他人说 hooks 有 return 值,而 events 没有。其他人再次说事件是为了处理异步 activity,挂钩只是为了在某些时候注入代码。
那么,上面的代码是关于 events 还是 hooks,谁能解释一下区别?
你的代码更像是一个事件。
Hooks 允许插件与调用它的代码交互。调用它们时假定数据将被返回,并且原始代码通常会在调用挂钩后立即循环遍历返回的数据。
另一方面,Events 仅在特定操作发生时才被调用以通告。他们让插件有机会 运行 他们自己的事件处理逻辑,而不会以任何方式直接影响原始代码。
我为 php 中的软件创建了一个插件系统。为了让插件改变程序的行为,我编写了这个(简化的)代码:
class PluginController {
/* ... */
public function addHook($name, $function, $priority = 10) {
/* store the function callback $function associated with $name */
}
public function executeHook($name, $args = array()) {
/* execute all function callbacks associated with $name
* in order of their priority and return their results */
}
}
因此插件可以使用 addHook
添加回调,并且在应用程序的某处通过调用 executeHook
来执行这些回调。
这很好用,但在阅读了一段时间有关该主题的内容后,我仍然不确定该技术是 event- 还是 hook- 系统。
一些消息来源说,差异与松耦合和紧耦合有关。 其他人说 hooks 有 return 值,而 events 没有。其他人再次说事件是为了处理异步 activity,挂钩只是为了在某些时候注入代码。
那么,上面的代码是关于 events 还是 hooks,谁能解释一下区别?
你的代码更像是一个事件。
Hooks 允许插件与调用它的代码交互。调用它们时假定数据将被返回,并且原始代码通常会在调用挂钩后立即循环遍历返回的数据。
另一方面,Events 仅在特定操作发生时才被调用以通告。他们让插件有机会 运行 他们自己的事件处理逻辑,而不会以任何方式直接影响原始代码。