C# Dependency: Should be a class or interface?

डिपेंडेंसी: क्लास या इंटरफ़ेस के रूप में?

इस लेख में हम विचार करेंगे कि हमें डिपेंडेंसी को एक क्लास के रूप में बनाना चाहिए अथवा इंटरफ़ेस के रूप में। देखिए, डिपेंडेंसी का अभिप्राय एक ऐसे टाइप से है जिसकी फंक्शनैलिटी का उपयोग किसी दूसरे क्लास के द्वारा किया जाता है। अब, यह टाइप या तो एक क्लास हो सकता है या इंटरफ़ेस।

क्लास और इंटरफ़ेस दोनों ही अपने भीतर फंक्शनैलिटी को इनकैप्सुलेट (encapsulate) कर रखते हैं, लेकिन जहां तक डिपेंडेंसी की बात है, तो हमारा उद्देश्य डिपेंडेंसी की फंक्शनैलिटी को किसी क्लास के द्वारा उपयोग किए जाने से है। तो, डिपेंडेंसी की जिस फंक्शनैलिटी को किसी क्लास के द्वारा उपयोग किया जाना है, उन सारी फंक्शनैलिटी को एक इंटरफ़ेस टाइप के भीतर भी इनकैप्सुलेट रखा जा सकता है, जो कि डिपेंडेंसी को उपयोग करते समय लूज़ली कपल्ड सिस्टम (loosely coupled system) का निर्माण करता है।

इसका अर्थ यह निकलता है कि जब कोई क्लास किसी डिपेंडेंसी को उपयोग करता है, तो वह इंटरफ़ेस टाइप को अपने भीतर उपयोग करता है, न कि क्लास को। जैसा कि हम जानते हैं कि इंटरफ़ेस को निर्मित नहीं किया जा सकता, बल्कि इंटरफ़ेस को इंप्लीमेंट (implement) करने वाले क्लास को निर्मित किया जा सकता है। साथ ही, दूसरी बात यह भी है कि एक इंटरफ़ेस को एक से अधिक क्लास के द्वारा इंप्लीमेंट किया जा सकता है। अतः, अपनी सुविधा के अनुसार जिस प्रकार के इंप्लीमेंटेशन की ज़रूरत हो, उस तरह के इंप्लीमेंटिंग क्लास (implementing class) का उपयोग उस डिपेंडेंसी इंटरफ़ेस के संदर्भ में किया जा सकता है।

इसका अर्थ यह निकला कि यदि डिपेंडेंसी एक इंटरफ़ेस के रूप में है, तो न केवल यह लूज़ली कपल्ड सिस्टम को बनाने में उपयोगी है, बल्कि यह सिस्टम के भीतर फ्लेक्सिबिलिटी (flexibility) या लचीलापन भी प्रदान करता है। इन सब बातों का निष्कर्ष यह निकलता है कि हमेशा हमें डिपेंडेंसी को एक इंटरफ़ेस टाइप के रूप में निर्मित करना चाहिए और उस डिपेंडेंसी का उपयोग किसी क्लास के भीतर करना चाहिए।

डिपेंडेंसी एक सर्विस के रूप में

इस लेख को समाप्त करने से पहले यह भी कहना चाहेंगे कि डिपेंडेंसी को एक सर्विस के रूप में भी समझ सकते हैं। डिपेंडेंसी एक सर्विस टाइप है जिसका उपयोग किसी क्लास के द्वारा किया जाता है और यह सर्विस टाइप यदि इंटरफ़ेस के रूप में है, तो यह सर्वोत्तम है।

.NET फ़्रेमवर्क में डिपेंडेंसी का उदाहरण

यही कारण है कि .NET एप्लीकेशन के भीतर जितने भी फ़्रेमवर्क में सर्विसेस हैं, वे सारे सर्विसेस आमतौर पर इंटरफ़ेस के रूप में उपलब्ध हैं। उदाहरण के लिए, यदि आप ASP.NET Core वेब एप्लीकेशन के फ़्रेमवर्क पर विचार कीजिए, तो उसमें IApplicationBuilder, IServiceCollection और IServiceProvider जैसे जितने भी सर्विसेस हैं, वे सभी इंटरफ़ेस के रूप में उपलब्ध हैं। इसका सबसे बड़ा लाभ यह है कि फ़्रेमवर्क लचीला बना रहता है। अगर भविष्य में फ़्रेमवर्क की फंक्शनैलिटी के इंप्लीमेंटेशन में परिवर्तन करना हो, तो आसानी से किया जा सकता है।


Next:

टिप्पणियाँ

इस ब्लॉग से लोकप्रिय पोस्ट

Differences between in-process and out-of-process hosting models

Web Fundamental Concepts in Hindi for Beginners - FAQs with their Answers Part-1

Introduction to ASP.NET Core and Web Frameworks