플러그인이 프로그램 흐름에 반응 할 수있는 앱을 고려하십시오.
나는 이것을 달성하는 두 가지 방법을 알고 있습니다 : 갈고리 와 사건
1. 후크
주 프로그램 흐름 내에서 함수를 비우려면 호출을 사용하십시오. 이러한 기능은 플러그인으로 대체 할 수 있습니다.
예를 들어 Drupal CMS는 모듈과 테마에 사용 가능한 후크를 구현합니다. 다음은 file_copy 함수 에서 hook이 구현되는 방법의 예입니다 .
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;
// ...
}
모듈은 in에 modulename_file_copy($file, $source)
의해 호출 될 함수를 구현할 수 있습니다 . 이 기능이 완료되면 실행이 재개됩니다.module_invoke_all
file_copy
file_copy
2. 행사
앱에서 이벤트를 전달하면 플러그인에서들을 수 있습니다. 구독 된 이벤트를 수신 한 후 플러그인은 프로그램 흐름을 가로 채고 필요한 작업을 수행합니다.
예를 들어 jQuery 갤러리 플러그인 Fotorama 는 여러 이벤트를 구현합니다 . 예를 들어, 다음 show
은 fotorama:show
이벤트 를 발생시키는 메소드 의 일부입니다 .
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.]
};
스크립트는이 이벤트를 듣고 실행될 때 무언가를 수행 할 수 있습니다.
$('.fotorama').on(
'fotorama:show',
function (e, fotorama, extra) {
console.log(e.type + (extra.user ? ' after user’s touch' : ''));
console.log('transition duration: ' + extra.time);
}
);
의문
이러한 플러그인 동작을 구현하는 다른 주류 방법이 있습니까?
그렇지 않다면 언제 후크를 사용해야합니까? 언제 이벤트를 사용해야합니까? 궁극적 인 목표를 고려하는 것은 앱과 플러그인 개발자의 관점에서 코드를 유지 하고 읽을 수 있게 만드는 것 입니까?