พิจารณาแอพที่อนุญาตให้ปลั๊กอินตอบสนองต่อโฟลว์ของโปรแกรม
ฉันรู้ 2 วิธีในการบรรลุเป้าหมายนี้: hooksและevents
1. ตะขอ
ใช้การเรียกฟังก์ชั่นที่ว่างเปล่าภายในผังโปรแกรมหลัก ฟังก์ชั่นเหล่านี้สามารถแทนที่ได้ด้วยปลั๊กอิน
ตัวอย่างเช่น Drupal CMS ใช้ฮุคที่พร้อมใช้งานกับโมดูลและธีม นี่คือตัวอย่างของวิธีการใช้เบ็ดในฟังก์ชั่น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);
}
);
คำถาม
มีวิธีอื่นที่สำคัญในการใช้งานปลั๊กอินหรือไม่
ถ้าไม่ควรใช้ตะขอเมื่อใดและเมื่อใดควรใช้เหตุการณ์เมื่อใด เมื่อพิจารณาถึงเป้าหมายสูงสุดคือการทำให้โค้ดสามารถดูแลและอ่านได้ง่ายขึ้นจากทั้งแอพและมุมมองของนักพัฒนาปลั๊กอิน