c# - सी#कक्षा पुस्तकालयों को डिजाइन करते समय मुझे इंटरफ़ेस पर विरासत कब चुननी चाहिए?




oop design-patterns inheritance interface (7)

मेरे पास एक संख्या Processor कक्षाएं हैं जो दो बहुत ही अलग चीजें करेगी, लेकिन उन्हें सामान्य कोड ("नियंत्रण में उलटा" स्थिति कहा जाता है) से कहा जाता है।

मैं सोच रहा हूं कि डिजाइन विचारों के बारे में मुझे कब पता होना चाहिए कि क्या उन्हें BaseProcessor से सभी का उत्तराधिकारी होना चाहिए, या IProcessor को इंटरफ़ेस के रूप में कार्यान्वित करना चाहिए।


Answers

डिजाइन शुद्धता एक तरफ, आप केवल एक बार विरासत प्राप्त कर सकते हैं, अगर आपको कुछ ढांचे वर्ग का उत्तराधिकारी होना है तो सवाल मंथन है।

यदि आपके पास कोई विकल्प है, तो व्यावहारिक रूप से आप उस विकल्प को चुन सकते हैं जो सबसे अधिक टाइपिंग बचाता है। वैसे भी यह आमतौर पर शुद्धवादी पसंद है।

संपादित करें:

यदि बेस क्लास में कुछ कार्यान्वयन होगा तो यह उपयोगी हो सकता है, अगर यह पूरी तरह से अबाधित है तो यह एक इंटरफ़ेस भी हो सकता है।


रिचर्ड,

उनके बीच क्यों चुनाव करें? मेरे पास प्रकाशित प्रकार (सिस्टम में कहीं और उपयोग के लिए) के रूप में एक आईप्रोसेसर इंटरफ़ेस होगा; और यदि ऐसा होता है कि आपके आईप्रोसेसर के विभिन्न वर्तमान कार्यान्वयन में सामान्य व्यवहार होता है, तो उस सामान्य व्यवहार को लागू करने के लिए एक सार बेसप्रोसेसर कक्षा वास्तविक वास्तविक जगह होगी।

इस तरह, यदि आपको भविष्य में एक आईप्रोसेसर की आवश्यकता है जो बेसप्रोसेसर की सेवाओं के लिए नहीं है, तो उसे यह नहीं है (और संभवतः इसे छुपाएं) ... लेकिन जो लोग चाहते हैं वे इसे प्राप्त कर सकते हैं ... काटना डुप्लिकेट कोड / अवधारणाओं में।

बस मेरी विनम्र राय।

चीयर्स। कीथ।


यदि आप जो भी चुनते हैं, कोई फर्क नहीं पड़ता, हमेशा इंटरफ़ेस चुनें। यह अधिक लचीलापन की अनुमति देता है। यह आपको भविष्य के परिवर्तनों से बचा सकता है (यदि आपको बेस क्लास में कुछ बदलना है, तो विरासत में कक्षाएं प्रभावित हो सकती हैं)। यह विवरण को बेहतर तरीके से समाहित करने की भी अनुमति देता है। यदि आप निर्भरता इंजेक्शन के नियंत्रण में कुछ उलटा उपयोग कर रहे हैं, तो वे इंटरफ़ेस का पक्ष लेते हैं।

या यदि विरासत से बचा नहीं जा सकता है, तो शायद दोनों को एक साथ उपयोग करने का एक अच्छा विचार है। एक इंटरफेस लागू करता है जो एक सार आधार वर्ग बनाएँ। आपके मामले में, प्रोसेसरबेस एक आईपी प्रोसेसर लागू करता है।

एएसपी.नेट एमवीसी में कंट्रोलरबेस और आईकंट्रोलर के समान।


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


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

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


इंटरफेस एक "अनुबंध" हैं, ये सुनिश्चित कर रहे हैं कि कुछ वर्ग सदस्यों के वांछित सेट - गुण, विधियों और घटनाओं को लागू करता है।

बेस वर्ग (ठोस या सार, कोई फर्क नहीं पड़ता) कुछ इकाई के archetype हैं। ये ये संस्थाएं हैं जो कुछ वास्तविक भौतिक या वैचारिक में आम है।

इंटरफेस का उपयोग कब करें?

जब भी किसी प्रकार को यह घोषित करने की आवश्यकता होती है, कम से कम, कुछ व्यवहार और गुण होते हैं जिन्हें उपभोक्ता को कुछ कार्य पूरा करने के लिए उनकी देखभाल करनी चाहिए और उनका उपयोग करना चाहिए।

बेस क्लास (कंक्रीट और / या अमूर्त) का उपयोग कब करें

जब भी संस्थाओं का एक समूह समान आर्केटाइप साझा करता है, जिसका अर्थ है बी बी को विरासत में मिलता है क्योंकि बी अंतर के साथ ए है, लेकिन बी को ए के रूप में पहचाना जा सकता है।

उदाहरण:

चलो टेबल के बारे में बात करते हैं।

  • हम रीसाइक्टेबल टेबल स्वीकार करते हैं => इसे "आईआरसाइक्टेबलटेबल" जैसे इंटरफेस के साथ परिभाषित किया जाना चाहिए ताकि सभी रीसाइक्टेबल टेबलों में "रीसायकल" विधि हो

  • हम डेस्कटॉप टेबल चाहते हैं => यह विरासत के साथ परिभाषित किया जाना चाहिए। एक "डेस्कटॉप टेबल" एक "टेबल" है। सभी तालिकाओं में सामान्य गुण होते हैं और व्यवहार होते हैं और डेस्कटॉप वाले में ऐसी चीजें शामिल होती हैं जो डेस्कटॉप टेबल को अन्य प्रकार की तालिकाओं से अलग बनाती हैं।

मैं एसोसिएशन के बारे में बात कर सकता हूं, ऑब्जेक्ट ग्राफ में दोनों मामलों का अर्थ, लेकिन मेरी विनम्र राय में, अगर मुझे एक वैचारिक दृष्टिकोण में तर्क देने की ज़रूरत है, तो मैं वास्तव में इस तर्क के साथ जवाब दूंगा।


नेट के लिए,

दूसरे साक्षात्कारकर्ता का आपका जवाब भी पहले का जवाब है ... सार कक्षाओं में कार्यान्वयन हो सकता है, और राज्य, इंटरफेस नहीं कर सकते ...

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





c# oop design-patterns inheritance interface