January 19, 2026 (2mo ago)

Singleton डिजाइन पैटर्न में महारत: एक संपूर्ण डेवलपर गाइड

Singleton डिजाइन पैटर्न की खोज करें: इसे कब उपयोग करें, व्यावहारिक TypeScript उदाहरण, और आवश्यक विकल्प।

← Back to blog
Cover Image for Singleton डिजाइन पैटर्न में महारत: एक संपूर्ण डेवलपर गाइड

Singleton डिजाइन पैटर्न की खोज करें: इसे कब उपयोग करें, व्यावहारिक TypeScript उदाहरण, और आवश्यक विकल्प।

TypeScript में Singleton पैटर्न में महारत: एक संपूर्ण गाइड

एक शाही लेखक का पेंसिल स्केच जो मुकुट पहने हुए है और मेज पर एक चमकती स्क्रॉल का ध्यानपूर्वक परीक्षण कर रहा है।

सॉफ्टवेयर विकास की दुनिया में कुछ उपकरण शक्तिशाली होते हैं लेकिन सावधानी से संभालने की आवश्यकता होती है। Singleton पैटर्न उन्हीं में से एक है। मूल रूप से, यह एक सरल विचार है: सुनिश्चित करें कि किसी क्लास का केवल एक ही इंस्टेंस हो और उसे एक्सेस करने का एक एकल, ग्लोबल रास्ता प्रदान करें।1

इसे अपने एप्लिकेशन के लिए एक केंद्रीय कॉन्फ़िगरेशन मैनेजर या समर्पित लॉगिंग सेवा की तरह सोचें। आप नहीं चाहेंगे कि कई विरोधाभासी कॉन्फ़िगरेशन ऑब्जेक्ट्स हवा में तैर रहे हों, और न ही आप चाहेंगे कि विभिन्न लॉगर इंस्टेंस अलग-अलग फाइलों में लॉग एंट्रीज़ बिखेर दें। Singleton इन डुप्लिकेट्स को रोककर व्यवस्था लाता है, मेमोरी बचाता है और अव्यवस्था से बचाता है। यह साझा संसाधनों तक पहुँच प्रबंधित करने के लिए एक मौलिक पैटर्न है।

Singleton पैटर्न क्या है और कब उपयोगी है?

एक मध्यकालीन राज्य की कल्पना करें जहाँ केवल एक आधिकारिक शाही लेखक (Royal Scribe) हो। यह व्यक्ति ही आधिकारिक रूप से शाही आदेश रिकॉर्ड करने का अधिकृत व्यक्ति है। इससे हर कानून और घोषणा सुसंगत, ठीक से अधिकृत और एकल, निर्णायक लेजर में संग्रहीत रहती है। अगर कोई भी यह तय कर सकता कि वह लेखक बन जाए, तो राज्य जल्दी ही विरोधाभासी रिकॉर्ड और बड़े पैमाने पर भ्रम के साथ अराजकता में उतर जाएगा।

Singleton डिजाइन पैटर्न आपके सॉफ़्टवेयर के भीतर इसी सिद्धांत पर काम करता है। इसका प्राथमिक कार्य एक क्लास को सीमित करना है ताकि उससे केवल एक ही ऑब्जेक्ट कभी बनाया जा सके। यही एक और अनूठा इंस्टेंस किसी विशिष्ट कार्य के लिए सत्य का स्रोत बन जाता है, और यह आपके कोडबेस के किसी भी हिस्से से आसानी से सुलभ होता है। यही तरीका है जिससे आप उन संसाधनों पर नियंत्रण लागू करते हैं जिन्हें कभी डुप्लीकेट नहीं किया जाना चाहिए।

मूल उद्देश्य और रूपक

Singleton सिर्फ लोगों को नए ऑब्जेक्ट बनाने से रोकने के बारे में नहीं है; यह नियंत्रण के केंद्रीयकरण के बारे में है। जैसे शाही लेखक राज्य के आधिकारिक रिकॉर्ड तक पहुंच का एकल बिंदु प्रदान करता है, वैसे ही एक Singleton इंस्टेंस साझा संसाधन के लिए एक सार्वभौमिक रूप से उपलब्ध द्वार प्रदान करता है। यह आपके एप्लिकेशन के अलग-अलग हिस्सों को उनके अपने सिलो और संभावित रूप से विरोधाभासी संस्करण बनाने से रोकता है।

एक डेटाबेस कनेक्शन पूल क्लासिक उदाहरण है। आप निश्चित रूप से नहीं चाहेंगे कि आपके ऐप का हर घटक डेटाबेस के लिए अपना अलग कनेक्शन खोले — यह सर्वर संसाधनों को खत्म करने और प्रदर्शन को ठप करने का पक्का तरीका है। इसके बजाय, एक Singleton एक कनेक्शन पूल को प्रबंधित कर सकता है, और आवश्यकता के अनुसार उन्हें कुशलतापूर्वक सौंप सकता है।

मूल विचार सरल पर शक्तिशালী है: एक क्लास, एक इंस्टेंस, एक वैश्विक एक्सेस पॉइंट। यह संरचना गारंटी देती है कि किसी विशिष्ट संसाधन के साथ सभी इंटरैक्शन एक एकल, नियंत्रित चैनल के माध्यम से होंगे।

Singleton पैटर्न एक नजर में

विशेषताविवरण और तर्क
Single Instanceक्लास को एप्लिकेशन के जीवनकाल में केवल एक ही इंस्टेंस होने के लिए डिज़ाइन किया गया है, अक्सर एक निजी (private) कंस्ट्रक्टर के साथ लागू किया जाता है।
Global Access Pointएक स्टेटिक मेथड (जैसे getInstance()) किसी भी कोड से उस इंस्टेंस तक पहुंचने का एक ज्ञात तरीका प्रदान करता है।
Lazy Initializationअक्सर एकल इंस्टेंस उसी समय बनाया जाता है जब पहली बार इसकी मांग होती है, न कि एप्लिकेशन स्टार्टअप पर, जो प्रदर्शन में सुधार कर सकता है।
State Managementयह एक विशिष्ट ग्लोबल स्टेट के लिए केंद्रीकृत स्थान के रूप में कार्य करता है, जैसे एप्लिकेशन सेटिंग्स या यूज़र सेशन।

यह तालिका संक्षेप में बताती है कि पैटर्न क्यों मौजूद है: जिन संसाधनों की प्रकृति में एकल होना निहित है, उनके लिए एकल, वैश्विक रूप से सुलभ इंस्टेंस लागू करने के लिए।

व्यावहारिक उपयोग के मामले

जबकि Singleton पैटर्न के आलोचक हैं, इसके वैध उपयोग भी हैं। यह तब सबसे प्रभावी होता है जब आपके पास ऐसा संसाधन हो जो सिस्टम के भीतर अपने स्वभाव से अद्वितीय हो।

यहाँ कुछ परिदृश्य हैं जहाँ Singleton समझ में आता है:

  • लॉगिंग सेवाएँ: एकल लॉगर इंस्टेंस सुनिश्चित करता है कि सभी इवेंट्स एक ही फाइल या स्ट्रीम में जाएँ।
  • कॉन्फ़िगरेशन प्रबंधन: एप्लिकेशन सेटिंग्स का एकल स्रोत मॉड्यूलों के बीच असंगति से बचाता है।
  • हार्डवेयर इंटरफ़ेस एक्सेस: किसी डिवाइस के लिए एकल इंटरफ़ेस विरोधाभासी कमांड्स को रोकता है।

Singletons के उपयोग के लाभ और नुकसान

एक पैमाना जो संरचित, अवलोकनीय डिजाइन पैटर्न की तुलना जटिल, उलझे और प्रयोगात्मक कोड से कर रहा है।

Singleton पैटर्न तब भरोसेमंद उपकरण की तरह महसूस कर सकता है जब आपको किसी साझा संसाधन तक पहुँच के लिए एकल बिंदु की आवश्यकता होती है। यह आपको पूरे एप्लिकेशन में कॉन्फ़िगरेशन ऑब्जेक्ट या लॉगिंग सेवा जैसी चीज़ों का प्रबंधन करने का एक सरल तरीका देता है।

Singletons के लाभ

  • ग्लोबल एक्सेस पॉइंट मॉड्यूलों के बीच उपयोग को सरल बनाता है।
  • लेज़ी इनिशियलाइज़ेशन के माध्यम से संसाधन संरक्षण स्टार्टअप लागत कम कर सकता है।
  • डुप्लीकेशन कम करने से महंगे संसाधनों के कई विरोधाभासी इंस्टेंस बनने से रोका जाता है।

Singletons के नुकसान

  • टाइट कपलिंग: क्लासेस अपने निर्भरताएँ ग्लोबल स्टेट तक पहुँच कर छिपा सकती हैं।
  • ग्लोबल स्टेट: साझा म्यूटेबल स्टेट मुश्किल-से-ढूँढे जाने वाले बग्स पैदा कर सकता है।
  • छिपे हुए साइड इफेक्ट्स: जो मेथड्स Singleton पर निर्भर करते हैं वे अपने सिग्नेचर में उस निर्भरता को प्रकट नहीं करते, जिससे तर्क और परीक्षण कठिन हो जाते हैं।

परीक्षण और कपलिंग पर प्रभाव

Singletons यूनिट टेस्टिंग को जटिल बनाते हैं क्योंकि वे ग्लोबल, स्थायी स्टेट पेश करते हैं। टेस्ट रन के बीच स्टेट लीक होने का जोखिम रहता है, और Singleton का मॉक करना अजीब हो सकता है। आधुनिक टीमें अक्सर डिपेंडेंसी इंजेक्शन को प्राथमिकता देती हैं क्योंकि यह निर्भरताओं को स्पष्ट और परीक्षण के दौरान बदलने में आसान बनाता है।3

ट्रेड-ऑफ का संतुलन

जब यह तय कर रहे हों कि Singleton का उपयोग करना है या नहीं, तो सुविधा और दीर्घकालिक मेंटेनबिलिटी तथा टेस्टेबिलिटी के बीच तौला करें। लेगेसी कोडबेस के लिए, डिपेंडेंसी इंजेक्शन की ओर क्रमिक रिफैक्टर्स अक्सर सबसे सुरक्षित मार्ग होते हैं: व्यवहार बनाए रखें जबकि छिपी हुई कपलिंग को कम करें और परीक्षण क्षमता में सुधार करें।

Singletons सरलता के बदले में ग्लोबल स्टेट का व्यापार करते हैं, इसलिए अपनी टीम की जरूरतों के आधार पर समझदारी से चुनें।

मुख्य निष्कर्ष

  • Singleton का प्रयोग संयमित रूप से और केवल उन सेवाओं के लिए करें जो वास्तव में अनन्य होनी चाहिए।
  • बेहतर डिस्कपलिंग और टेस्टेबिलिटी के लिए स्पष्ट डिपेंडेंसी इंजेक्शन को प्राथमिकता दें।
  • यदि Singleton का उपयोग करना अनिवार्य है, तो उसे लेज़ी बनाएं और समवर्तीता (concurrency) तथा थ्रेड सुरक्षा का ध्यान रखें।
  • लेगेसी सिस्टम्स के लिए, कंपोज़िशन रूट पर इंटरफेस और DI पेश करके Singleton को क्रमिक रूप से हटाएँ।

TypeScript में Singleton पैटर्न को कैसे लागू करें

ConfigManager को एक ताला के साथ दिखाने वाला डायग्राम, जो TypeScript में getInstance का उपयोग करते हुए Singleton डिजाइन पैटर्न को दर्शाता है।

आइए सिद्धांत से व्यावहारिक की ओर बढ़ें और TypeScript में एक आधुनिक, टाइप-सेफ Singleton बनाएं। सीक्रेट सॉस है एक private कंस्ट्रक्टर और एक static मेथड जो गेटकीपर का काम करता है। यह संयोजन सुनिश्चित करता है कि आपके एप्लिकेशन का कोई भी अन्य भाग नया इंस्टेंस नहीं बना सकता; सभी एकल प्रवेश बिंदु से होकर जाते हैं।2

हमारे हैंड्स-ऑन उदाहरण के लिए, हम एक ConfigManager बनाएँगे। यह क्लास एप्लिकेशन सेटिंग्स लोड और सर्व करती है, यह गारंटी देते हुए कि हर कंपोनेंट एक ही सत्य स्रोत से पढ़ता है।

एक टाइप-सेफ ConfigManager बनाना

// A practical example of the Singleton pattern for configuration management.

class ConfigManager {
  // 1. A private, static property to hold the single instance.
  private static instance: ConfigManager;

  // 2. A place to store our configuration data.
  private settings: Map<string, any> = new Map();

  // 3. The private constructor. This stops `new ConfigManager()` from working anywhere else.
  private constructor() {
    // In a real app, you'd load from a file, environment variables, or a service.
    console.log("Initializing ConfigManager instance...");
    this.settings.set("API_URL", "https://api.example.com");
    this.settings.set("TIMEOUT", 5000);
  }

  // 4. The public, static method that controls access to the single instance.
  public static getInstance(): ConfigManager {
    if (!ConfigManager.instance) {
      ConfigManager.instance = new ConfigManager();
    }
    return ConfigManager.instance;
  }

  // 5. A regular public method to get a specific setting.
  public get(key: string): any {
    return this.settings.get(key);
  }
}

// TypeScript will stop you from doing this:
// const config = new ConfigManager(); // Error: Constructor of class 'ConfigManager' is private.

यह संरचना TypeScript के एक्सेस मॉडिफायर्स का उपयोग करती है ताकि एक सिंगल-इंस्टेंस क्लास और लेज़ी इनिशियलाइज़ेशन लागू किया जा सके। private कंस्ट्रक्टर और static इंस्टेंस पैटर्न कई सरल जरूरतों के लिए सहज और प्रभावी हैं।

सर्विस में Singleton का उपयोग करना

class ApiService {
  private apiUrl: string;

  constructor() {
    const config = ConfigManager.getInstance();
    this.apiUrl = config.get("API_URL");
    console.log(`ApiService initialized with API URL: ${this.apiUrl}`);
  }

  public fetchData(): void {
    console.log(`Fetching data from ${this.apiUrl}...`);
    // Real data-fetching logic would live here.
  }
}

// --- Application Entry Point ---
console.log("Application starting...");

const service1 = new ApiService();
service1.fetchData();

const service2 = new ApiService();
console.log("Application finished.");

जब आप यह कोड चलाते हैं, तो आपको ConfigManager से केवल एक बार इनिशियलाइज़ेशन संदेश दिखाई देना चाहिए, जो साबित करता है कि दोनों सर्विसेस ने वही इंस्टेंस प्राप्त किया।

Singletons को बुरा नाम क्यों मिलता है

Singleton पैटर्न आकर्षक लगता है क्योंकि यह सरल है और आपको एक ग्लोबली सुलभ ऑब्जेक्ट देता है। जो गलत हो सकता है वह है छिपी हुई कपलिंग, ग्लोबल म्यूटेबल स्टेट, और परीक्षण संबंधी दुःस्वप्न। जब कोई क्लास चुपके से किसी ग्लोबल इंस्टेंस तक पहुँचती है, तो वह एक ऐसी निर्भरता छिपाती है जो उसके कंस्ट्रक्टर में स्पष्ट होनी चाहिए। इससे सिस्टम को समझना और परीक्षण करना और भी कठिन हो जाता है।3

समवर्तीता और ग्लोबल स्टेट में दुःस्वप्न

स्टेटफुल Singletons समवर्ती परिदृश्यों में रेस कंडीशंस पैदा कर सकते हैं। एक SessionCounter पर विचार करें जहाँ दो समकालिक अनुरोध एक ही काउंटर को बढ़ाते हैं। समन्वयन के बिना, दोनों एक ही प्रारंभिक मान पढ़ सकते हैं और विरोधाभासी अपडेट लिख सकते हैं। ये बग टाइमिंग-निर्भर होते हैं और पुन: उत्पन्न करना मुश्किल होता है।

परीक्षण की जदोजहद

Singletons यूनिट टेस्ट्स को नाज़ुक बनाते हैं क्योंकि स्टेट टेस्ट्स के बीच लीक हो सकता है और मॉक करना कठिन हो जाता है। टेस्ट्स निष्पादन क्रम पर निर्भर होने लगते हैं और सूट अनिश्चित हो सकता है। इसलिए टीमें अक्सर डिपेंडेंसी इंजेक्शन अपनाती हैं: यह निर्भरताओं को स्पष्ट बनाता है और मॉक करना आसान बनाता है।

इन समस्याओं के बावजूद, Singletons जंगली दुनिया में बने रहते हैं। एक बार पेश हो जाने पर वे अक्सर कोडबेस में फैल जाते हैं, इसलिए आर्किटेक्चर सुधारते समय ऑडिट और क्रमिक रिफैक्टर्स महत्वपूर्ण होते हैं।

Singleton पैटर्न के आधुनिक विकल्प

Singletons द्वारा लाए गए जोखिमों को देखकर आप शायद पूछ रहे हैं, "इसके बजाय क्या उपयोग करूँ?" डिपेंडेंसी इंजेक्शन (DI) साझा संसाधनों का प्रबंधन करने के लिए पसंदीदा तरीका है। DI निर्भरताओं को स्पष्ट बनाता है और टेस्टेबिलिटी व मॉड्यूलैरिटी में सुधार करता है।

डिपेंडेंसी इंजेक्शन बनाम Singletons

मूल ApiService की तुलना करें, जो एक Singleton तक पहुँचता है, उस संस्करण से जो अपने कंस्ट्रक्टर के माध्यम से एक कॉन्फ़िगरेशन मैनेजर स्वीकार करता है।

interface IConfigManager {
  get(key: string): any;
}

class ApiService {
  private apiUrl: string;

  constructor(config: IConfigManager) {
    this.apiUrl = config.get("API_URL");
  }
}

अब ApiService केवल IConfigManager अनुबंध पर निर्भर करता है। परीक्षण के दौरान आप एक फेक या मॉक पास कर सकते हैं, जिससे परीक्षण तेज़ और पूर्वानुमाननीय बनते हैं।

निर्भरताओं को किसने बनाया इसकी नियंत्रणता को उल्टा करके, कंपोनेंट अधिक केंद्रित और लचीले बनते हैं। यह विचार Dependency Inversion Principle के केंद्र में है।

IoC कंटेनरों की भूमिका

एक Inversion of Control (IoC) कंटेनर आपके एप्लिकेशन के लिए ऑब्जेक्ट निर्माण और इंजेक्शन का प्रबंधन करता है। लोकप्रिय TypeScript फ्रेमवर्क DI कंटेनरों को बिल्ट-इन प्रदान करते हैं, जैसे NestJS और Angular, या सामान्य प्रोजेक्ट्स के लिए लाइब्रेरीज़ जैसे InversifyJS।45

कंटेनर आपको चुनने देते हैं कि ऑब्जेक्ट्स कैसे साझा किए जाएँ: ट्रांज़िएंट, स्कोप्ड, या सिंगलटन-जैसी लाइफसाइकल। इससे आपको एक साझा इंस्टेंस के लाभ मिलते हैं बिना प्रोग्रामैटिक Singleton की छिपी हुई कपलिंग के।

लेगेसी कोडबेस में Singletons को कैसे रिफैक्टर करें

क्रमिक रूप से काम करें। जहां Singleton उपयोग हो रहा है उसे पहचानें, उसके व्यवहार का वर्णन करने वाला एक स्पष्ट इंटरफ़ेस परिभाषित करें, और व्यक्तिगत कंज्यूमर को इंटरफ़ेस के माध्यम से कंस्ट्रक्टर इंजेक्शन स्वीकार करने के लिए बदलना शुरू करें। फिर कंपोज़िशन रूट पर कंक्रीट इंस्टेंस को वायर करें या उसे DI कंटेनर से प्रबंधित कराएँ।

चरण 1: Singleton की पहचान और अलगाव

MySingleton.getInstance() के हर कॉल को खोजें और Singleton की जिम्मेदारियों के चारों ओर एक सीमा खींचें। उस इंटरफ़ेस को परिभाषित करें जो आपको आवश्यक सार्वजनिक मेथड्स को सूचीबद्ध करता है।

चरण 2: क्रमिक रूप से डिपेंडेंसी इंजेक्शन पेश करें

एक उपभोक्ता को एक समय में रिफैक्टर करें:

  1. कंस्ट्रक्टर को इंटरफ़ेस स्वीकार करने के लिए बदलें।
  2. सीधे getInstance() कॉल्स को इंजेक्टेड इंस्टेंस के कॉल्स से बदलें।
  3. इंस्टैंटिएशन पॉइंट पर, तब तक Singleton इंस्टेंस पास करें जब तक पूरा माइग्रेशन पूरा नहीं हो जाता।

यह ऐप्लिकेशन को स्थिर रखता है जबकि आप छिपी हुई कपलिंग को कम कर रहे होते हैं।

चरण 3: Singleton को एक प्रबंधित इंस्टेंस से बदलें

एक बार जब कंज्यूमर इंटरफ़ेस के माध्यम से निर्भरताएँ लेते हैं, तब आप स्टैटिक getInstance() को हटा सकते हैं और इम्प्लीमेंटेशन को एक साधारण क्लास बना सकते हैं जिसकी सार्वजनिक कंस्ट्रक्टर हो। कंपोज़िशन रूट पर एक इंस्टेंस बनाएँ और जहां आवश्यक हो उसे पास करें, या लाइफसाइकल और स्कोप को संभालने के लिए DI कंटेनर का उपयोग करें।

Singletons के बारे में आपके जलते सवालों के जवाब

क्या Singletons हमेशा बुरा विचार हैं?

हर बार नहीं। वे सच में अनन्य, स्टेटलेस सेवाओं के लिए समझ में आते हैं, जैसे कि एक केंद्रीय लॉगर या हार्डवेयर एडाप्टर। तब भी, DI और नियंत्रित कंपोज़िशन रूट अक्सर वही व्यवहार बेहतर टेस्टेबिलिटी के साथ प्रदान करते हैं।

Singletons यूनिट टेस्टिंग को कैसे बिगाड़ते हैं?

वे ग्लोबल, स्थायी स्टेट पेश करते हैं जो टेस्ट्स के बीच लीक कर सकता है और मॉकिंग को कठिन बना देता है। टेस्ट्स क्रम-निर्भर और फ्लेकी हो सकते हैं। DI टेस्ट्स को सरल बनाता है क्योंकि मॉक सीधे इंजेक्ट किए जा सकते हैं।

क्या एक स्टैटिक क्लास मूल रूप से एक ही बात नहीं है?

नहीं। एक स्टैटिक क्लास केवल स्टैटिक मेंबर्स की मेज़बानी करता है और उसे इंस्टैंटिएट नहीं किया जा सकता। एक Singleton का एक वास्तविक इंस्टेंस होता है और वह इंटरफेस इम्प्लीमेंट कर सकता है और एक ऑब्जेक्ट के रूप में पास किया जा सकता है। दोनों दृष्टिकोण टाइट कपलिंग की ओर ले जा सकते हैं, इसलिए लचीलापन के लिए DI को प्राथमिकता दें।

आपकी टीम के लिए अगले कदम

यह चर्चा शुरू करें कि कहाँ, अगर कहीं भी, एकल साझा इंस्टेंस वास्तव में आवश्यक है। एक पृथक मॉड्यूल में DI का प्रोटोटाइप बनाएं, स्पष्ट कोडिंग मानक अपनाएँ, और तकनीकी ऋण को मापने के लिए टूल्स का उपयोग करें। पेयर प्रोग्रामिंग और निरंतर फीडबैक रिफैक्टर्स को सुरक्षित और कुशल बनाए रखने में मदद करते हैं।

याद रखें, कोई भी डिजाइन पैटर्न जादुई गोली नहीं है। Singletons की अपनी जगह है, लेकिन उन्हें विवेकपूर्ण तरीके से उपयोग करना चाहिए और साफ़ इंटरफेस तथा स्पष्ट ओनरशिप नियमों के साथ जोड़ा जाना चाहिए।

अक्सर पूछे जाने वाले प्रश्न — त्वरित Q&A

Q: Singleton कब उपयुक्त होता है? A: जब कोई संसाधन वास्तव में अनन्य और स्टेटलेस हो, जैसे एक केंद्रीकृत लॉगर या हार्डवेयर एडाप्टर। जहाँ संभव हो DI को प्राथमिकता दें।

Q: मैं अब Singleton का उपयोग करने वाले कोड का परीक्षण कैसे कर सकता हूँ? A: एक इंटरफ़ेस पेश करें, कंज्यूमर को इंटरफ़ेस स्वीकार करने के लिए रिफैक्टर करें, और एक टेस्ट डबल इंजेक्ट करें। बड़े पैमाने पर रिग्रेशन से बचने के लिए इसे क्रमिक रूप से करें।

Q: लेगेसी ऐप से Singletons हटाने का सबसे सुरक्षित मार्ग क्या है? A: उपयोगों का मानचित्र बनाएं, इंटरफ़ेस परिभाषित करें, कंज्यूमर को निर्भरताएँ स्वीकार करने के लिए रिफैक्टर करें, फिर कंपोज़िशन रूट पर एकल इंस्टेंस बनाएं और उसे इंजेक्ट करें या DI कंटेनर का उपयोग करें।


1.
Martin Fowler, “Singleton,” Bliki, https://martinfowler.com/bliki/Singleton.html
2.
3.
Mark Seemann, “Singletons Are Pathological Liars,” https://blog.ploeh.dk/2010/07/28/SingletonsArePathologicalLiar/
4.
NestJS Documentation, “Dependency Injection,” https://docs.nestjs.com/fundamentals/injection
5.
InversifyJS Documentation, https://inversify.io/
← Back to blog
🙋🏻‍♂️

AI कोड लिखता है।
आप इसे टिकाऊ बनाते हैं।

AI त्वरण के युग में, क्लीन कोड केवल एक अच्छी प्रथा नहीं है — यह उन प्रणालियों के बीच का अंतर है जो स्केल होती हैं और कोडबेस जो अपने वजन के तहत ढह जाते हैं।