เทคนิคการหลีกเลี่ยงการใช้งาน Singleton Pattern
จริงๆแล้ว Singleton Pattern มันก็มีประโยชน์หากใช้ถูกต้องตามหลักการของมัน ซึ่งก็คือการประกันว่าจะมีคลาสนี้ให้ใช้งานเพียงอันเดียวเท่านั้นตลอดทั้งแอพพลิเคชั่น ผมยกตัวอย่างเพิ่มเติมอีกสักอันละกัน เช่นการสั่งซื้อสินค้า ปกติจะต้องมีขั้นตอนการเลือกซื้อ => ตรวจสอบการสั่งซื้อ => ชำระเงิน เรามักจะใช้วิธีการส่งข้อมูลจากฟอร์มแรก ไปยังฟอร์มสอง และสามตามลำดับ (หากอนาคตมีฟอร์มสร้างใหม่หรือมีการเปลี่ยนขั้นตอนก็ต้องมาแก้ไขการรับส่งค่าใหม่ในทุกฟอร์ม) แต่หากมีการใช้ Singleton เข้าช่วย เช่นทำการกรอกฟอร์มแรก แล้วส่งข้อมูลไปเก็บไว้ที่ Singleton และทำเช่นเดียวกันนี้กับฟอร์มอื่นๆด้วย (ฟอร์มจะรับส่งค่ากับ Singleton เท่านั้น ไม่มีการส่งไปมาระหว่างฟอร์ม) การเพิ่มฟอร์มหรือแก้ไขขั้นตอนก็จะทำเพียงแค่ฟอร์มที่เกี่ยวข้องกับ Singleton เท่านั้น
แต่จากข้อเสียของ Singleton ทำให้หลายๆคนอาจไม่ชอบใช้ (ไม่ว่าด้วยเหตุใดก็ตาม) เราก็มีวิธีเลี่ยงการใช้งาน Singleton ได้
กฏข้อที่หนึ่ง Singleton ต้องมีเพียง Instance เดียวเท่านั้น (Single Instance) ข้อนี้ไม่ยากครับ ให้เราสร้างคลาสและควบคุมการสร้างด้วยตัวเองให้ได้ (ห้ามไม่ให้มีใครสร้างซ้ำด้วยตัวเอง)
กฏข้อที่สอง Singleton ต้องสามารถเรียกใช้ได้จากทุกที่ (Global Access) ข้อนี้ง่ายมาก PHP มีตัวแปร Global ให้เรียกใช้อยู่แล้วเช่น $_ENV
เพียงแค่นี้เราก็สามารถเรียกใช้คลาสด้วยตัวแปร $_ENV['cfg'] จากที่ใดก็ได้
จริงๆแล้วคำแนะนำจากผมคือ เราจะสามารถเลือกใช้ Singleton หรือไม่ก็ได้ ถ้าเราเลือกที่จะไม่ใช้ เราก็ต้องควบคุมมันด้วยตัวเอง (เหมาะกับโปรเจ็คขนาดเล็กหรือทำคนเดียว) แต่หากทำงานเป็นทีมหรือบนโปรเจ็คขนาดใหญ่ การใช้ Singleton ก็จะช่วยลดข้อผิดพลาดลงได้
แต่จากข้อเสียของ Singleton ทำให้หลายๆคนอาจไม่ชอบใช้ (ไม่ว่าด้วยเหตุใดก็ตาม) เราก็มีวิธีเลี่ยงการใช้งาน Singleton ได้
กฏข้อที่หนึ่ง Singleton ต้องมีเพียง Instance เดียวเท่านั้น (Single Instance) ข้อนี้ไม่ยากครับ ให้เราสร้างคลาสและควบคุมการสร้างด้วยตัวเองให้ได้ (ห้ามไม่ให้มีใครสร้างซ้ำด้วยตัวเอง)
กฏข้อที่สอง Singleton ต้องสามารถเรียกใช้ได้จากทุกที่ (Global Access) ข้อนี้ง่ายมาก PHP มีตัวแปร Global ให้เรียกใช้อยู่แล้วเช่น $_ENV
$_ENV['cfg'] = new Cgf();
เพียงแค่นี้เราก็สามารถเรียกใช้คลาสด้วยตัวแปร $_ENV['cfg'] จากที่ใดก็ได้
จริงๆแล้วคำแนะนำจากผมคือ เราจะสามารถเลือกใช้ Singleton หรือไม่ก็ได้ ถ้าเราเลือกที่จะไม่ใช้ เราก็ต้องควบคุมมันด้วยตัวเอง (เหมาะกับโปรเจ็คขนาดเล็กหรือทำคนเดียว) แต่หากทำงานเป็นทีมหรือบนโปรเจ็คขนาดใหญ่ การใช้ Singleton ก็จะช่วยลดข้อผิดพลาดลงได้