รูปแบบของโมดูลเดิมถูกกำหนดให้เป็นวิธีการจัดให้มีการห่อหุ้มส่วนตัวและสาธารณะสำหรับคลาสในวิศวกรรมซอฟต์แวร์ทั่วไป
เมื่อทำงานกับรูปแบบโมดูลเราอาจพบว่ามีประโยชน์ในการกำหนดแม่แบบง่าย ๆ ที่เราใช้สำหรับเริ่มต้นใช้งาน นี่คือสิ่งที่ครอบคลุมการเว้นวรรคชื่อตัวแปรสาธารณะและส่วนตัว
ในจาวาสคริปต์รูปแบบโมดูลถูกใช้เพื่อเลียนแบบแนวคิดของคลาสเพิ่มเติมในลักษณะที่เราสามารถรวมทั้งวิธีสาธารณะ / ส่วนตัวและตัวแปรภายในวัตถุเดียวดังนั้นจึงป้องกันบางส่วนจากขอบเขตส่วนกลาง สิ่งนี้ส่งผลในการลดโอกาสของชื่อฟังก์ชั่นของเราที่ขัดแย้งกับฟังก์ชั่นอื่น ๆ ที่กำหนดไว้ในสคริปต์เพิ่มเติมในหน้า
var myNamespace = (function () {
var myPrivateVar, myPrivateMethod;
// A private counter variable
myPrivateVar = 0;
// A private function which logs any arguments
myPrivateMethod = function( foo ) {
console.log( foo );
};
return {
// A public variable
myPublicVar: "foo",
// A public function utilizing privates
myPublicFunction: function( bar ) {
// Increment our private counter
myPrivateVar++;
// Call our private method using bar
myPrivateMethod( bar );
}
};
})();
ข้อดี
ทำไมรูปแบบของโมดูลจึงเป็นตัวเลือกที่ดี? สำหรับผู้เริ่มต้นมันสะอาดกว่าสำหรับนักพัฒนาที่มาจากพื้นหลังเชิงวัตถุมากกว่าแนวคิดของการห่อหุ้มที่แท้จริงอย่างน้อยจากมุมมอง JavaScript
ประการที่สองมันรองรับข้อมูลส่วนตัวดังนั้นในรูปแบบของโมดูลส่วนสาธารณะของรหัสของเราสามารถสัมผัสกับส่วนส่วนตัวได้อย่างไรก็ตามโลกภายนอกไม่สามารถสัมผัสชิ้นส่วนส่วนตัวของชั้นเรียนได้
ข้อเสีย
ข้อเสียของรูปแบบโมดูลคือเมื่อเราเข้าถึงสมาชิกของรัฐและเอกชนต่างกันเมื่อเราต้องการเปลี่ยนการมองเห็นจริง ๆ แล้วเราต้องทำการเปลี่ยนแปลงในแต่ละสถานที่ที่สมาชิกใช้
นอกจากนี้เรายังไม่สามารถเข้าถึงสมาชิกเอกชนในวิธีการที่จะถูกเพิ่มไปยังวัตถุที่จุดภายหลัง ที่กล่าวว่าในหลายกรณีรูปแบบโมดูลยังคงมีประโยชน์มากและเมื่อใช้อย่างถูกต้องแน่นอนมีศักยภาพในการปรับปรุงโครงสร้างของแอปพลิเคชันของเรา
รูปแบบโมดูลการเปิดเผย
ตอนนี้เรามีความคุ้นเคยกับรูปแบบของโมดูลเพิ่มขึ้นเล็กน้อยมาดูรุ่นที่ได้รับการปรับปรุงเล็กน้อย - รูปแบบของ Revealing Module ของ Christian Heilmann
รูปแบบของโมดูลการเปิดเผยเกิดขึ้นเมื่อ Heilmann รู้สึกผิดหวังกับความจริงที่ว่าเขาต้องทำซ้ำชื่อของวัตถุหลักเมื่อเราต้องการเรียกวิธีสาธารณะหนึ่งวิธีจากอีกวิธีหนึ่งหรือเข้าถึงตัวแปรสาธารณะนอกจากนี้เขายังไม่ชอบข้อกำหนดรูปแบบของโมดูล เพื่อคัดค้านสัญกรณ์ตามตัวอักษรสำหรับสิ่งที่เขาต้องการให้เป็นสาธารณะ
ผลลัพธ์ของความพยายามของเขาคือรูปแบบที่ทันสมัยซึ่งเราเพียงแค่กำหนดฟังก์ชันและตัวแปรทั้งหมดของเราในขอบเขตส่วนตัวและส่งคืนวัตถุที่ไม่ระบุชื่อพร้อมตัวชี้ไปยังฟังก์ชันส่วนตัวที่เราต้องการเปิดเผยในที่สาธารณะ
ตัวอย่างของวิธีการใช้รูปแบบการเปิดเผยโมดูลสามารถพบได้ที่ด้านล่าง
var myRevealingModule = (function () {
var privateVar = "Ben Cherry",
publicVar = "Hey there!";
function privateFunction() {
console.log( "Name:" + privateVar );
}
function publicSetName( strName ) {
privateVar = strName;
}
function publicGetName() {
privateFunction();
}
// Reveal public pointers to
// private functions and properties
return {
setName: publicSetName,
greeting: publicVar,
getName: publicGetName
};
})();
myRevealingModule.setName( "Paul Kinlan" );
ข้อดี
รูปแบบนี้ช่วยให้ไวยากรณ์ของสคริปต์ของเราสอดคล้องกันมากขึ้น นอกจากนี้ยังทำให้ชัดเจนยิ่งขึ้นในตอนท้ายของโมดูลซึ่งฟังก์ชั่นและตัวแปรของเราสามารถเข้าถึงได้แบบสาธารณะซึ่งช่วยให้อ่านง่ายขึ้น
ข้อเสีย
ข้อเสียของรูปแบบนี้คือถ้าฟังก์ชั่นส่วนตัวหมายถึงฟังก์ชั่นสาธารณะฟังก์ชั่นสาธารณะนั้นไม่สามารถถูกแทนที่ได้หากจำเป็นต้องมีการแก้ไข นี่เป็นเพราะฟังก์ชั่นส่วนตัวจะยังคงอ้างถึงการใช้งานส่วนตัวและรูปแบบที่ไม่ได้ใช้กับสมาชิกสาธารณะเฉพาะกับฟังก์ชั่น
สมาชิกออบเจกต์สาธารณะที่อ้างถึงตัวแปรส่วนบุคคลจะต้องอยู่ภายใต้กฎการแก้ไขที่ไม่มีการแก้ไขข้างต้น