जावास्क्रिप्ट और सज्जन: आपको डिज़ाइन पैटर्न की आवश्यकता क्यों है (और वे जीवन को कैसे सरल बनाएंगे)

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

जावास्क्रिप्ट और सज्जन: आपको डिज़ाइन पैटर्न की आवश्यकता क्यों है (और वे जीवन को कैसे सरल बनाएंगे)

\n\n

क्या आपने कभी अपनी पुरानी जावास्क्रिप्ट प्रोजेक्ट खोली और सोचा: "यह किसने लिखा? यह तो स्पेगेटी कोड है!"? यदि हाँ — तो क्लब में आपका स्वागत है। देर-सबेर हर डेवलपर ऐसी स्थिति का सामना करता है जब कोड अव्यवस्थित हो जाता है। और यहाँ जावास्क्रिप्ट में डिज़ाइन पैटर्न मदद के लिए आते हैं — सामान्य समस्याओं के लिए सिद्ध समाधान।

\n\n

लेकिन आइए एक बात स्पष्ट कर दें: पैटर्न कोई चांदी की गोली नहीं हैं। यह कोई जादू नहीं है जो आपके कोड को एक रात में परफेक्ट बना देगा। ये उपकरण हैं। और कोई भी उपकरण तभी अच्छा होता है जब आप जानते हैं कि इसे कब और क्यों उपयोग करना है। हम बिल्कुल इसी बारे में बात करेंगे।

\n\n

सरल शब्दों में डिज़ाइन पैटर्न क्या हैं?

\n\n

कल्पना करें कि आप एक आर्किटेक्ट हैं। आप हर बार पहिये या दरवाजे के उद्घाटन का नया आकार नहीं बनाते। आप सिद्ध समाधानों का उपयोग करते हैं: मेहराब, स्तंभ, लोड-बेयरिंग दीवारें। JS में डिज़ाइन पैटर्न वही "आर्किटेक्चरल ब्लूप्रिंट" हैं, बस कोड के लिए।

\n\n

वे तीन मुख्य समस्याओं का समाधान करते हैं:

\n
    \n
  • पुनरावृत्ति — पहिया को फिर से बनाने की आवश्यकता नहीं;
  • \n
  • पठनीयता — दूसरा डेवलपर तुरंत आपके तर्क को समझ जाएगा;
  • \n
  • स्केलेबिलिटी — कोड को सब कुछ तोड़ने के जोखिम के बिना आसानी से विस्तारित किया जा सकता है।
  • \n
\n\n

इस लेख में, हम चार सबसे लोकप्रिय पैटर्न पर चर्चा करेंगे जो वास्तव में दैनिक कार्य में उपयोगी होंगे। कोई बेकार की बात नहीं — केवल कोड और अभ्यास।

\n\n

1. Singleton (एकल): जब आपको केवल एक की आवश्यकता हो

\n\n

ऐसी स्थितियाँ होती हैं जब एप्लिकेशन में किसी क्लास का ठीक एक उदाहरण होना चाहिए। उदाहरण के लिए:

\n
    \n
  • ग्लोबल स्टेट स्टोर (जैसे Redux store);
  • \n
  • त्रुटियों को लॉग करने के लिए लॉगर;
  • \n
  • डेटाबेस या API से कनेक्शन।
  • \n
\n\n

Singleton पैटर्न गारंटी देता है कि आप ऑब्जेक्ट बनाने की कितनी भी कोशिश करें — आपको वही एक मिलेगा।

\n\n

उदाहरण: विज़िट काउंटर

\n\n
class Counter {\n  constructor() {\n    if (Counter.instance) {\n      return Counter.instance;\n    }\n    this.count = 0;\n    Counter.instance = this;\n  }\n\n  increment() {\n    this.count++;\n  }\n\n  getCount() {\n    return this.count;\n  }\n}\n\n// उपयोग\nconst counter1 = new Counter();\nconst counter2 = new Counter();\n\ncounter1.increment();\ncounter1.increment();\n\nconsole.log(counter2.getCount()); // 2 — क्योंकि यह एक ही ऑब्जेक्ट है\nconsole.log(counter1 === counter2); // true\n
\n\n

कब उपयोग करें: जब आपके लिए किसी संसाधन तक एकल पहुँच बिंदु होना महत्वपूर्ण हो। लेकिन सावधान रहें — JS में Singleton का एक सामान्य दुष्प्रभाव ग्लोबल स्टेट है, जिसका परीक्षण करना कठिन है। इसका दुरुपयोग न करें।

\n\n

2. Module (मॉड्यूल): स्मार्ट तरीके से एनकैप्सुलेशन

\n\n

ES6 Modules के आने से पहले, डेवलपर्स प्राइवेट और पब्लिक मेथड बनाने के लिए Module पैटर्न का उपयोग करते थे। अब भी, जब हमारे पास import/export है, यह दृष्टिकोण एक फ़ाइल के अंदर तर्क को व्यवस्थित करने के लिए उपयोगी बना हुआ है।

\n\n

रहस्य क्लोजर (closures) में है। हम एक फ़ंक्शन बनाते हैं जो मेथड वाला एक ऑब्जेक्ट लौटाता है, और आंतरिक वेरिएबल बाहर से पहुँच योग्य नहीं रहते।

\n\n

उदाहरण: ऑनलाइन स्टोर की शॉपिंग कार्ट

\n\n
const ShoppingCart = (function() {\n  // प्राइवेट वेरिएबल\n  let items = [];\n  \n  // प्राइवेट मेथड\n  function calculateTotal() {\n    return items.reduce((sum, item) => sum + item.price * item.quantity, 0);\n  }\n\n  // पब्लिक API\n  return {\n    addItem(product) {\n      const existing = items.find(item => item.id === product.id);\n      if (existing) {\n        existing.quantity++;\n      } else {\n        items.push({ ...product, quantity: 1 });\n      }\n    },\n    removeItem(productId) {\n      items = items.filter(item => item.id !== productId);\n    },\n    getTotal() {\n      return calculateTotal();\n    },\n    clear() {\n      items = [];\n    }\n  };\n}                

ब्लॉग

पुस्तक अनुशंसाएँ