Considere una aplicación que permita que los complementos reaccionen a su flujo de programa.
Conozco 2 formas de lograr esto: ganchos y eventos
1. Ganchos
Use llamadas para vaciar funciones dentro del flujo del programa principal. Estas funciones pueden ser anuladas por complementos.
Por ejemplo, Drupal CMS implementa ganchos que están disponibles para módulos y temas. Aquí hay un ejemplo de cómo se implementa hook en una función file_copy .
function file_copy(stdClass $source, $destination = NULL, $replace = FILE_EXISTS_RENAME) {
// ... [File copying routine]
// Inform modules that the file has been copied.
module_invoke_all('file_copy', $file, $source);
return $file;
// ...
}
Un módulo puede implementar una modulename_file_copy($file, $source)
función que será llamada por module_invoke_all
in file_copy
. Una vez que finalice esta función, file_copy
se reanudará la ejecución.
2. Eventos
Haga que la aplicación envíe eventos, que los complementos pueden escuchar. Después de recibir un evento al que se ha suscrito, un complemento interceptará el flujo del programa y realizará las operaciones necesarias.
Por ejemplo, un complemento de la galería jQuery Fotorama implementa varios eventos . Como ejemplo, aquí hay una parte de su show
método que dispara el fotorama:show
evento.
that.show = function (options) {
// ... [show the new frame]
// [fire the event]
options.reset || triggerEvent('show', {
user: options.user,
time: time
});
// ... [do lots of other stuff with navigation bars, etc.]
};
Un script puede escuchar este evento y hacer algo cuando se dispara:
$('.fotorama').on(
'fotorama:show',
function (e, fotorama, extra) {
console.log(e.type + (extra.user ? ' after user’s touch' : ''));
console.log('transition duration: ' + extra.time);
}
);
PREGUNTA
¿Hay otras formas convencionales de implementar dicho comportamiento de complemento?
Si no es así, ¿cuándo se deben usar ganchos y cuándo se deben usar eventos? Teniendo en cuenta que el objetivo final es hacer que el código sea más fácil de mantener y leer, tanto desde la aplicación como desde la perspectiva del desarrollador del complemento.