एक ऐप पर विचार करें जो प्लगइन्स को अपने कार्यक्रम प्रवाह पर प्रतिक्रिया करने की अनुमति देता है।
मैं इसे प्राप्त करने के 2 तरीके जानता हूं: हुक और ईवेंट
1. हुक
मुख्य कार्यक्रम प्रवाह के अंदर खाली कार्यों के लिए कॉल का उपयोग करें। इन कार्यों को प्लगइन्स द्वारा ओवरराइड किया जा सकता है।
उदाहरण के लिए, ड्रुपल सीएमएस हुक को लागू करता है जो मॉड्यूल और थीम के लिए उपलब्ध हैं। यहाँ एक उदाहरण दिया गया है कि 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;
// ...
}
एक मॉड्यूल एक को लागू कर सकते 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);
}
);
सवाल
क्या इस तरह के प्लगइन व्यवहार को लागू करने के लिए अन्य मुख्यधारा के तरीके हैं?
यदि नहीं, तो किसी को हुक का उपयोग कब करना चाहिए और कब घटनाओं का उपयोग करना चाहिए? अंतिम लक्ष्य को ध्यान में रखते हुए कोड को ऐप और प्लगइन डेवलपर के दृष्टिकोण दोनों से अधिक मुख्य और पठनीय बनाना है?