এমন একটি অ্যাপ্লিকেশন বিবেচনা করুন যা প্লাগইনগুলিকে তার প্রোগ্রাম প্রবাহে প্রতিক্রিয়া জানাতে দেয়।
আমি এটি অর্জনের 2 টি উপায় জানি: হুকস এবং ইভেন্টগুলি
1. হুকস
মূল প্রোগ্রাম প্রবাহের ভিতরে খালি ফাংশনগুলিতে কলগুলি ব্যবহার করুন। এই ফাংশনগুলি প্লাগইনগুলির মাধ্যমে ওভাররেড করা যায়।
উদাহরণস্বরূপ, ড্রুপাল সিএমএস হুক প্রয়োগ করে যা মডিউল এবং থিমগুলিতে উপলব্ধ। ফাইল_কপি ফাংশনে হুক কীভাবে প্রয়োগ করা হয় তার একটি উদাহরণ এখানে ।
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. ইভেন্টগুলি
অ্যাপ্লিকেশন প্রেরণের ইভেন্টগুলি করুন, যা প্লাগইনগুলি শুনে শোনা যায়। এটির সদস্যতা নেওয়া কোনও ইভেন্ট পাওয়ার পরে, একটি প্লাগইন প্রোগ্রাম প্রবাহকে বাধা দেয় এবং প্রয়োজনীয় ক্রিয়াকলাপ সম্পাদন করে।
উদাহরণস্বরূপ, একটি জিকুয়েরি গ্যালারী প্লাগইন ফোটোরমা বেশ কয়েকটি ইভেন্ট প্রয়োগ করে । উদাহরণস্বরূপ, এখানে তার 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);
}
);
প্রশ্ন
এই ধরনের প্লাগইন আচরণ বাস্তবায়নের জন্য কি মূলধারার অন্যান্য উপায় আছে?
যদি তা না হয় তবে কখন হুক ব্যবহার করা উচিত এবং কখন ইভেন্ট ব্যবহার করা উচিত? চূড়ান্ত লক্ষ্য বিবেচনা করে কোডটি আরও রক্ষণাবেক্ষণযোগ্য এবং পঠনযোগ্য করে তোলা, অ্যাপ এবং প্লাগইন বিকাশকারী উভয়ের দৃষ্টিকোণ থেকে?