C# में SOLID सिद्धांत: सिद्धांत और व्यवहार A से Z तक

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

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

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

परिचय: C# में SOLID सिद्धांतों की आवश्यकता क्यों है?

\n\n

प्रत्येक C# डेवलपर को देर-सबेर "गंदे कोड" की समस्या का सामना करना पड़ता है: ऐसी क्लासेज़ जो सब कुछ करती हैं, अपठनीय निर्भरताएँ, और बिना पूरे प्रोजेक्ट को तोड़ने के जोखिम के बदलाव करने में असमर्थता। SOLID, रॉबर्ट मार्टिन द्वारा प्रतिपादित ऑब्जेक्ट-ओरिएंटेड डिज़ाइन के पाँच मूलभूत सिद्धांतों का संक्षिप्त नाम है। ये C# (.NET) में लचीला, रखरखाव योग्य और परीक्षण योग्य कोड बनाने में मदद करते हैं।

\n\n

इस लेख में, हम C# पर सैद्धांतिक आधार और व्यावहारिक उदाहरणों के साथ प्रत्येक SOLID सिद्धांत पर चर्चा करेंगे। आप सीखेंगे कि वास्तविक प्रोजेक्ट्स में उन्हें कैसे लागू किया जाए, सामान्य गलतियों से बचते हुए।

\n\n

1. Single Responsibility Principle (SRP) — एकल उत्तरदायित्व का सिद्धांत

\n\n

सिद्धांत

\n

एक क्लास में बदलाव का केवल एक ही कारण होना चाहिए। दूसरे शब्दों में, प्रत्येक क्लास प्रोग्राम की कार्यक्षमता के केवल एक भाग के लिए उत्तरदायी होती है। SRP का उल्लंघन करने से, एक ऑपरेशन (जैसे, डेटाबेस में सहेजना) में बदलाव गणना या प्रदर्शन के तर्क को प्रभावित करता है।

\n\n

C# पर व्यवहार

\n

SRP उल्लंघन का एक सामान्य उदाहरण देखें — एक क्लास जो एक साथ वेतन की गणना करती है और कर्मचारी को डेटाबेस में सहेजती है:

\n\n
// ❌ SRP का उल्लंघन: क्लास बहुत अधिक कर रही है\npublic class Employee\n{\n    public string Name { get; set; }\n    public decimal Salary { get; set; }\n\n    public decimal CalculateBonus()\n    {\n        return Salary * 0.1m;\n    }\n\n    public void SaveToDatabase()\n    {\n        // डेटाबेस में सहेजने का तर्क\n        Console.WriteLine("कर्मचारी डेटाबेस में सहेजा गया");\n    }\n}
\n\n

उत्तरदायित्वों को अलग करके स्थिति को ठीक करें:

\n\n
// ✅ SRP: प्रत्येक क्लास अपने कार्य के लिए उत्तरदायी है\npublic class Employee\n{\n    public string Name { get; set; }\n    public decimal Salary { get; set; }\n}\n\npublic class BonusCalculator\n{\n    public decimal Calculate(Employee employee)\n    {\n        return employee.Salary * 0.1m;\n    }\n}\n\npublic class EmployeeRepository\n{\n    public void Save(Employee employee)\n    {\n        Console.WriteLine("कर्मचारी डेटाबेस में सहेजा गया");\n    }\n}
\n\n

2. Open-Closed Principle (OCP) — खुले/बंद का सिद्धांत

\n\n

सिद्धांत

\n

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

\n\n

C# पर व्यवहार

\n

मान लीजिए, हमें विभिन्न आकृतियों के क्षेत्रफल की गणना करनी है। OCP का उल्लंघन — प्रत्येक नई आकृति के लिए if-else या switch का उपयोग करना:

\n\n
// ❌ OCP का उल्लंघन: नई आकृति जोड़ने पर कोड बदलना होगा\npublic class AreaCalculator\n{\n    public double Calculate(object shape)\n    {\n        if (shape is Circle circle)\n            return Math.PI * circle.Radius * circle.Radius;\n        else if (shape is Rectangle rect)\n            return rect.Width * rect.Height;\n        // Triangle जोड़ने पर एक और if लिखना होगा\n        return 0;\n    }\n}
\n\n

समाधान — एब्स्ट्रैक्शन और पॉलीमॉर्फिज़्म का उपयोग करें:

\n\n
// ✅ OCP: मौजूदा कोड को छुए बिना इनहेरिटेंस के माध्यम से विस्तार\npublic abstract class Shape\n{\n    public abstract double GetArea();\n}\n\npublic class Circle : Shape\n{\n    public double Radius { get; set; }\n    public override double GetArea() => Math.PI * Radius * Radius;\n}\n\npublic class Rectangle : Shape\n{\n    public double Width { get; set; }\n    public double Height { get; set; }\n    public override double GetArea() => Width * Height;\n}\n\npublic class AreaCalculator\n{\n    public double Calculate(Shape shape)\n    {\n        return shape.GetArea(); // किसी भी आकृति के लिए काम करता है\n    }\n}
\n\n

3. Liskov Substitution Principle (LSP) — बारबरा लिस्कोव का प्रतिस्थापन सिद्धांत

\n\n

सिद्धांत

\n

बेस क्लास की वस्तुओं को उनके उपवर्गों की वस्तुओं द्वारा प्रतिस्थापित किया जाना चाहिए बिना किसी उल्लंघन के

ब्लॉग

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