जावास्क्रिप्ट में डोमेन-ड्रिवन डिज़ाइन: जटिल कोड? प्रो की तरह व्यवस्थित करें

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

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

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

आपका JavaScript कोड स्पेगेटी में बदल रहा है? DDD लागू करने का समय आ गया है

\n\n

क्या आपने कभी सोचा है कि JavaScript पर आपका प्रोजेक्ट स्पेगेटी की प्लेट जैसा दिखने लगा है? विधियाँ एक-दूसरे से जुड़ी हुई हैं, एक मॉड्यूल में बदलाव से तीन अन्य टूट जाते हैं, और बिज़नेस लॉजिक कंट्रोलर, सर्विसेज़ और यूटिलिटीज़ में बिखरा हुआ है। परिचित लगता है? यदि आपका प्रोजेक्ट "सिर्फ प्रोटोटाइप" चरण से आगे बढ़ गया है, तो डोमेन-ड्रिवन डिज़ाइन (DDD) से परिचित होने का समय आ गया है।

\n\n

बहुत से लोग सोचते हैं कि DDD केवल Java या C# के बड़े प्रोजेक्ट्स के लिए है। लेकिन यह एक मिथक है। JavaScript प्रोजेक्ट्स में डोमेन-ड्रिवन डिज़ाइन न केवल संभव है, बल्कि अविश्वसनीय रूप से उपयोगी भी है। यह डेवलपर्स और व्यवसाय को एक ही भाषा में बात करने में मदद करता है, और कोड पूर्वानुमानित और परिवर्तनों के प्रति प्रतिरोधी बन जाता है। इस लेख में, हम वास्तविक कोड उदाहरणों के साथ DDD को व्यवहार में समझेंगे, ताकि आप इसे आज ही लागू कर सकें।

\n\n

DDD क्या है और JavaScript डेवलपर को इसकी आवश्यकता क्यों है?

\n\n

DDD कोई लाइब्रेरी या फ्रेमवर्क नहीं है। यह सॉफ्टवेयर डिज़ाइन करने का एक दृष्टिकोण है जो व्यवसाय के डोमेन (विषय क्षेत्र) को केंद्र में रखता है। डेटाबेस टेबल या REST API के बारे में सोचने के बजाय, आप व्यवसाय की संस्थाओं के बारे में सोचते हैं: "ऑर्डर", "ग्राहक", "इनवॉइस", "डिस्काउंट गणना नियम"।

\n\n

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

\n\n

JavaScript के लिए, जहाँ हम अक्सर डायनेमिक टाइपिंग और प्रोटोटाइप का उपयोग करते हैं, DDD अनुशासन लाता है। यह डेटा प्रकारों और उनके परिवर्तन के नियमों को स्पष्ट रूप से वर्णित करने के लिए मजबूर करता है, जो Node.js पर स्केलेबल एप्लिकेशन या जटिल क्लाइंट एप्लिकेशन के लिए महत्वपूर्ण है।

\n\n

DDD के मुख्य निर्माण खंड (JS पर उदाहरणों के साथ)

\n\n

आइए सबसे दिलचस्प भाग पर आते हैं - कोड। हम एक ऑनलाइन स्टोर में ऑर्डर प्रबंधन के लिए एक सरल लेकिन प्रभावशाली सिस्टम लिखेंगे। हम आधुनिक JavaScript (ES6+) का उपयोग करेंगे।

\n\n

1. Value Object (मान-वस्तु)

\n\n

यह एक अपरिवर्तनीय वस्तु है जो अपनी पहचान के बजाय अपनी विशेषताओं द्वारा परिभाषित होती है। दो Value Object समान हैं यदि उनके मान समान हैं। इसका आदर्श उदाहरण पैसा, पता, ईमेल है।

\n\n
// value-objects/Money.js\nclass Money {\n  constructor(amount, currency) {\n    // मान्यकरण - DDD का मुख्य भाग\n    if (typeof amount !== 'number' || amount < 0) {\n      throw new Error('राशि एक सकारात्मक संख्या होनी चाहिए');\n    }\n    if (!['USD', 'RUB', 'EUR'].includes(currency)) {\n      throw new Error('असमर्थित मुद्रा');\n    }\n\n    this._amount = amount;\n    this._currency = currency;\n    // अपरिवर्तनीयता के लिए ऑब्जेक्ट को फ्रीज़ करें\n    Object.freeze(this);\n  }\n\n  get amount() { return this._amount; }\n  get currency() { return this._currency; }\n\n  // बिज़नेस मेथड: पैसे जोड़ना\n  add(otherMoney) {\n    if (this.currency !== otherMoney.currency) {\n      throw new Error('विभिन्न मुद्राओं को नहीं जोड़ा जा सकता');\n    }\n    return new Money(this.amount + otherMoney.amount, this.currency);\n  }\n\n  equals(other) {\n    return this.amount === other.amount && this.currency === other.currency;\n  }\n}\n\n// उपयोग\nconst price = new Money(100, 'USD');\nconst tax = new Money(20, 'USD');\nconst total = price.add(tax); // Money { _amount: 120, _currency: 'USD' }\nconsole.log(total);
\n\n

यह क्यों अच्छा है? अब पैसे की राशि सिर्फ एक संख्या नहीं है, बल्कि नियमों वाली एक पूर्ण इकाई है। आप गलती से डॉलर को रूबल में नहीं जोड़ सकते या राशि को नकारात्मक नहीं बना सकते।

\n\n

2. Entity (इकाई)

\n\n

Value Object के विपरीत, Entity की एक पहचान होती है। यह समय के साथ बदल सकती है, लेकिन इसकी ID अपरिवर्तित रहती है। उदाहरण के लिए, उपयोगकर्ता या ऑर्डर।

\n\n
// entities/Order.js\nconst { v4: uuidv4 } = require('uuid'); // या crypto.randomUUID()\n\nclass Order {\n  constructor(id                

ब्लॉग

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