JavaScript में SOLID सिद्धांत: सिद्धांत और व्यावहारिक गाइड

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

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

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

JavaScript में SOLID सिद्धांत: सिद्धांत और व्यावहारिक गाइड

\n\n

गुणवत्तापूर्ण सॉफ्टवेयर विकास के लिए केवल भाषा के सिंटैक्स का ज्ञान ही नहीं, बल्कि आर्किटेक्चर के सिद्धांतों की समझ भी आवश्यक है। SOLID ऑब्जेक्ट-ओरिएंटेड डिज़ाइन के पाँच मूलभूत सिद्धांत हैं जो लचीला, रखरखाव योग्य और स्केलेबल कोड बनाने में मदद करते हैं। इस लेख में हम JavaScript (Node.js) के संदर्भ में प्रत्येक SOLID सिद्धांत को व्यावहारिक उदाहरणों के साथ समझेंगे।

\n\n

SOLID क्या है?

\n\n

SOLID का संक्षिप्त नाम रॉबर्ट मार्टिन (अंकल बॉब) द्वारा दिया गया था और इसमें निम्नलिखित सिद्धांत शामिल हैं:

\n\n
    \n
  • S — Single Responsibility Principle (एकल जिम्मेदारी का सिद्धांत)
  • \n
  • O — Open/Closed Principle (खुला/बंद सिद्धांत)
  • \n
  • L — Liskov Substitution Principle (लिस्कोव प्रतिस्थापन सिद्धांत)
  • \n
  • I — Interface Segregation Principle (इंटरफ़ेस पृथक्करण सिद्धांत)
  • \n
  • D — Dependency Inversion Principle (निर्भरता उलटाव सिद्धांत)
  • \n
\n\n

ये सिद्धांत सार्वभौमिक हैं और JavaScript सहित किसी भी प्रोग्रामिंग भाषा पर लागू होते हैं। आइए प्रत्येक को विस्तार से समझें।

\n\n

1. Single Responsibility Principle (SRP)

\n\n

परिभाषा: एक क्लास या मॉड्यूल में बदलाव का केवल एक ही कारण होना चाहिए। दूसरे शब्दों में, प्रत्येक मॉड्यूल एक विशिष्ट कार्य के लिए जिम्मेदार होता है।

\n\n

खराब उदाहरण: एक UserService क्लास जो यूज़र को सेव करने, ईमेल भेजने और रिपोर्ट जनरेट करने के लिए जिम्मेदार है।

\n\n
// ❌ SRP का उल्लंघन\nclass UserService {\n    saveUser(user) {\n        // डेटाबेस में सेव करना\n        console.log('User saved');\n    }\n\n    sendEmail(user) {\n        // ईमेल भेजना\n        console.log('Email sent to ' + user.email);\n    }\n\n    generateReport(user) {\n        // रिपोर्ट जनरेट करना\n        console.log('Report generated for ' + user.name);\n    }\n}
\n\n

अच्छा उदाहरण: जिम्मेदारी को अलग-अलग क्लास में बाँटें।

\n\n
// ✅ SRP का पालन\nclass UserRepository {\n    save(user) {\n        console.log('User saved');\n    }\n}\n\nclass EmailService {\n    send(user) {\n        console.log('Email sent to ' + user.email);\n    }\n}\n\nclass ReportGenerator {\n    generate(user) {\n        console.log('Report generated for ' + user.name);\n    }\n}\n\n// उपयोग\nconst user = { name: 'राहुल', email: 'rahul@example.com' };\nconst userRepo = new UserRepository();\nconst emailService = new EmailService();\nconst reportGen = new ReportGenerator();\n\nuserRepo.save(user);\nemailService.send(user);\nreportGen.generate(user);
\n\n

अब प्रत्येक क्लास की एक ही जिम्मेदारी है, और एक मॉड्यूल में बदलाव दूसरे को प्रभावित नहीं करता।

\n\n

2. Open/Closed Principle (OCP)

\n\n

परिभाषा: सॉफ्टवेयर संस्थाएँ (क्लास, मॉड्यूल, फंक्शन) विस्तार के लिए खुली होनी चाहिए, लेकिन संशोधन के लिए बंद।

\n\n

खराब उदाहरण: एक फंक्शन जो आकृतियों का क्षेत्रफल निकालता है और कंडीशनल स्टेटमेंट का उपयोग करता है।

\n\n
// ❌ OCP का उल्लंघन\nfunction calculateArea(shape) {\n    if (shape.type === 'circle') {\n        return Math.PI * shape.radius ** 2;\n    } else if (shape.type === 'rectangle') {\n        return shape.width * shape.height;\n    }\n    // नई आकृति जोड़ने पर फंक्शन बदलना पड़ेगा\n    return 0;\n}
\n\n

अच्छा उदाहरण: पॉलिमॉर्फिज़्म और इनहेरिटेंस का उपयोग करें।

\n\n
// ✅ OCP का पालन\nclass Shape {\n    area() {\n        throw new Error('area() मेथड को लागू किया जाना चाहिए');\n    }\n}\n\nclass Circle extends Shape {\n    constructor(radius) {\n        super();\n        this.radius = radius;\n    }\n\n    area() {\n        return Math.PI * this.radius ** 2;\n    }\n}\n\nclass Rectangle extends Shape {\n    constructor

ब्लॉग

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