تكرار السؤال: …
الإجابة المختصرة
لأنه يدخل حالة عامة مشتركة (Global Mutable State) تخفي التبعيات وتجعل الاختبار المستقل مستحيلاً، فضلاً عن تعقيدات الأمان وتعدد الخيوط (Thread Safety).
الشرح
السينجلتون ينتهك مبدأ المسؤولية الواحدة (SRP) لأنه يدير دورة حياته بنفسه بالإضافة لأداء وظيفته الأساسية. في بيئات تعدد الخيوط والـ Unit Testing، تحتفظ الكائنات العامة بحالتها بين الاختبارات مما يؤدي لفشل عشوائي متسلسل وغير مفهوم. في النظم الحديثة، يتم الاعتماد على حاويات حقن التبعيات (DI Containers) لتسجيل الخدمات كـ Singleton Lifecycle مع إبقاء الكود نفسه عادياً وقابلاً للاختبار والـ Mock.
مثال بالكود
class Singleton {
private static instance: Singleton;
private constructor() {} // منع الإنشاء المباشر
public static getInstance(): Singleton {
if (!Singleton.instance) Singleton.instance = new Singleton();
return Singleton.instance;
}
}أخطاء شائعة
- تطبيق السينجلتون في بيئة متعددة الخيوط دون مزامنة ملائمة، مما يسبب إنشاء عدة نسخ متزامنة في الذاكرة (Race Condition).