Я создал систему плагинов для программного обеспечения в 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
,
Это работает довольно хорошо, но, прочитав некоторое время на эту тему, я все еще не уверен, является ли эта техника событие- или hook- система.
Некоторые источники говорят, что разница связана со слабой и плотной связью.
Другие говорят, что хуки имеют возвращаемые значения, а события — нет. А другие снова говорят, что события предназначены для асинхронной активности, и в какой-то момент просто перехватывают код.
Итак, еще раз, приведенный выше код о События или же крючки, а может кто-нибудь объяснить разницу?
Ваш код больше похож на событие.
Крючки разрешить плагину взаимодействовать с кодом, который его вызвал. Они вызываются в предположении, что данные будут возвращены, а исходный код будет обычно проходить по возвращенным данным сразу после вызова ловушки.
События, с другой стороны, вызываются только для объявления о том, когда произошло конкретное действие. Они дают плагинам возможность запускать свою собственную логику обработки событий на этом этапе, без какого-либо прямого влияния на исходный код.
Других решений пока нет …