TypeScript में SOLID सिद्धांत: उदाहरणों के साथ उन्नत स्तर

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

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

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

TypeScript में SOLID सिद्धांत: उन्नत स्तर का सिद्धांत और अभ्यास

\n\n

SOLID — ऑब्जेक्ट-ओरिएंटेड डिज़ाइन के पाँच मूलभूत सिद्धांत हैं जो लचीला, रखरखाव योग्य और स्केलेबल कोड बनाने में सक्षम बनाते हैं। TypeScript में, सख्त टाइपिंग, इंटरफ़ेस और अमूर्त वर्गों के कारण, इन सिद्धांतों का कार्यान्वयन विशेष रूप से प्रभावी हो जाता है। इस लेख में, हम TypeScript में वास्तविक उदाहरणों के साथ उन्नत स्तर पर प्रत्येक सिद्धांत का विश्लेषण करेंगे।

\n\n

1. Single Responsibility Principle (SRP) — एकल जिम्मेदारी का सिद्धांत

\n\n

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

\n\n

उन्नत अभ्यास: SRP का उल्लंघन अक्सर "दैवीय वस्तुओं" (God Objects) में प्रकट होता है। संयोजन और प्रतिनिधिमंडल का उपयोग करें।

\n\n
// ❌ SRP का उल्लंघन: वर्ग डेटा, सत्यापन और भंडारण दोनों के लिए जिम्मेदार है\nclass UserService {\n  constructor(private user: User) {}\n\n  validateEmail(email: string): boolean {\n    return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email);\n  }\n\n  saveToDatabase(): void {\n    // भंडारण तर्क\n  }\n\n  sendWelcomeEmail(): void {\n    // भेजने का तर्क\n  }\n}\n\n// ✅ SRP: जिम्मेदारी को विभाजित करें\ninterface IEmailValidator {\n  isValid(email: string): boolean;\n}\n\ninterface IUserRepository {\n  save(user: User): Promise<void>;\n}\n\ninterface INotificationService {\n  sendWelcome(user: User): Promise<void>;\n}\n\nclass UserRegistrationService {\n  constructor(\n    private validator: IEmailValidator,\n    private repository: IUserRepository,\n    private notifier: INotificationService\n  ) {}\n\n  async register(user: User): Promise<void> {\n    if (!this.validator.isValid(user.email)) {\n      throw new Error('अमान्य ईमेल');\n    }\n    await this.repository.save(user);\n    await this.notifier.sendWelcome(user);\n  }\n}
\n\n

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

\n\n

सिद्धांत: वर्ग विस्तार के लिए खुले होने चाहिए, लेकिन संशोधन के लिए बंद होने चाहिए। TypeScript में, यह अमूर्त वर्गों और इंटरफ़ेस के माध्यम से प्राप्त किया जाता है।

\n\n

उन्नत अभ्यास: OCP को लागू करने के लिए "रणनीति" (Strategy) पैटर्न का उपयोग करें।

\n\n
// ❌ OCP का उल्लंघन: नई रिपोर्ट प्रकार जोड़ने पर वर्ग को बदलना होगा\nclass ReportGenerator {\n  generate(data: any[], type: string): string {\n    if (type === 'csv') {\n      return data.map(row => row.join(',')).join('\\n');\n    } else if (type === 'json') {\n      return JSON.stringify(data);\n    }\n    // 'xml' जोड़ने पर — इस विधि को संशोधित करें\n    throw new Error('असमर्थित प्रारूप');\n  }\n}\n\n// ✅ OCP: बहुरूपता का उपयोग करें\ninterface IReportFormatter {\n  format(data: any[]): string;\n}\n\nclass CsvFormatter implements IReportFormatter {\n  format(data: any[]): string {\n    return data.map(row => row.join(',')).join('\\n');\n  }\n}\n\nclass JsonFormatter implements IReportFormatter {\n  format(data: any[]): string {\n    return JSON.stringify(data);\n  }\n}\n\nclass XmlFormatter implements IReportFormatter {\n  format(data: any[]): string {\n    // XML के लिए कार्यान्वयन\n    return '<data>...</data>';\n  }\n}\n\nclass ReportGeneratorOCP {\n  constructor(private formatter: IReportFormatter) {}\n\n  generate(data: any[]): string {\n    return this.formatter.format(data);\n  }\n}\n\n// उपयोग: बिना संशोधन के विस्तार करें\nconst csvReport = new ReportGeneratorOCP(new CsvFormatter());\nconst jsonReport = new ReportGeneratorOCP(new JsonFormatter());
\n\n

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

\n\n

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

ब्लॉग

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