กูเกิลโอเพนซอร์สเครื่องมือตัวใหม่เพื่อช่วยให้นักพัฒนาค้นหา Singleton Pattern ภายในโค้ดจาวา เพื่อเป็นเครื่องมือช่วยให้นักพัฒนารู้ตัวว่ากำลังทำงานอยู่กับ Singleton
Singleton เป็นหนึ่งใน design pattern ของ Gang of 4 ที่ถูกใช้กันอย่างผิดๆ และมากจนเกินเลย ข้อผิดพลาดส่วนใหญ่มาจากผู้ที่ไม่เข้าใจแนวคิด OOP อย่างดีพอ
Singleton จัดเป็น pattern ที่สร้างง่าย แต่มีอันตรายมาก ผู้ที่คุ้นเคยภาษาดั้งเดิมที่มีคอนเซปต์ตัวแปร global มักจะหลงรัก pattern นี้ได้ง่ายและใช้มันอย่างผิดวิสัยที่ GOF ตั้งใจ
หลายๆ ทีที่ Singleton มีผลร้ายมากกว่าผลเสีย และมักพบปัญหาตามมาที่หลัง เช่น
- ทำให้ในแต่ละหน่วยเสีย modularity ลง
- การ test โปรแกรมเกิดข้อผิดพลาดเนื่องจากไม่รู้ว่าภายในมีการเรียกใช้ Singleton ส่งผลให้แต่ละ unit test เกิดการขึ้นต่อกันอย่างไม่ได้ตั้งใจ (ซึ่งมันผิดหลักของ unit testing)
- ผู้ใช้ไม่สามารถหลีกเลี่ยงการ unit test โดยไม่ test Singleton ไปด้วย
- ใน Test Driven Development มองว่า Singleton เป็นสิ่งชั่วร้ายเลยด้วยซ้ำ
- ปัญหาการ subclass คลาส Singleton ที่จะไม่ใช่ Singleton อีกต่อไปสร้างปัญหาอย่างมาก เนื่องจากผิดเจตนารมณ์ของผู้สร้าง และเป็นกับดักที่ซ่อนตัวอย่างแนบเนียนซะด้วย
- Singleton สร้างปัญหาให้สถาปัตยกรรมยุ่งยากขึ้น เมื่อผู้ออกแบบเบื้องต้นไม่ได้คำนึงถึงจะมีการเรียกใช้ผ่านการทำ concurrent programming
ปัจจุบันโปรแกรมเมอร์ที่ดีมักจะผลักภาระนี้ไปให้ IoC Container ทั้งหลายเป็นผู้บริหารการแจกจ่าย Singleton object ให้กับผู้ที่ต้องการจริงๆ แทนที่จะ hard code ลงไปในสถาปัตยกรรม
ในโปรแกรมของคุณมี Singleton กันกี่ที่เอ่ย?
ที่มา – Google Code Blog