2008-09-12 14 views
20

इंटरफ़ेस पृथक्करण सिद्धांत (आईएसपी) का कहना है कि कई क्लाइंट विशिष्ट इंटरफेस एक सामान्य उद्देश्य इंटरफ़ेस से बेहतर होते हैं। यह महत्वपूर्ण क्यों है?इंटरफ़ेस पृथक्करण सिद्धांत के पीछे तर्क क्या है?

उत्तर

29

आईएसपी कहा गया है कि:

ग्राहकों तरीकों है कि वे का उपयोग नहीं करते पर निर्भर करने के लिए मजबूर नहीं किया जाना चाहिए।

आईएसपी महत्वपूर्ण विशेषताओं से संबंधित है - cohesion और coupling
आदर्श रूप से आपके घटकों को अत्यधिक अनुरूप होना चाहिए। यह कोड मजबूती और रखरखाव में सुधार करता है। - बेहतर understandability, मजबूती

  • कम coupling - बेहतर रख-रखाव, परिवर्तन
  • आप के बारे में अधिक जानने के लिए चाहते हैं के लिए उच्च प्रतिरोध

    • उच्च cohesion:

      प्रवर्तन आईएसपी आप निम्नलिखित बोनस देता है सॉफ्टवेयर डिजाइन सिद्धांतों, Agile Software Development, Principles, Patterns, and Practices पुस्तक की एक प्रति प्राप्त करें।

    +2

    यदि आप सी # जुंकी हैं: यह पुस्तक सी # के अनुरूप भी उपलब्ध है। इसे सी # में Agile सिद्धांतों, पैटर्न, और प्रथाओं कहा जाता है। –

    +0

    एरिक, मैंने इसे पहले ही पढ़ा है :-) – aku

    5

    यह इंटरफ़ेस को सरल बनाता है कि कोई भी क्लाइंट उन निर्भरताओं को उपयोग और हटा देगा जो वे अन्यथा इंटरफ़ेस के उन हिस्सों पर विकसित हो सकते हैं जिनकी उन्हें आवश्यकता नहीं है।

    3

    एक कारण यह है कि प्रत्येक इंटरफ़ेस के साथ कम से कम तरीकों के साथ कई इंटरफ़ेस होने से प्रत्येक इंटरफ़ेस को कार्यान्वित करना और उन्हें सही ढंग से कार्यान्वित करना आसान हो जाता है। एक बड़ा इंटरफ़ेस बेकार हो सकता है। साथ ही, किसी परिदृश्य में एक केंद्रित इंटरफ़ेस का उपयोग करने से कोड अधिक रखरखाव योग्य हो जाता है क्योंकि आप देख सकते हैं कि ऑब्जेक्ट का कौन सा पहलू उपयोग किया जा रहा है (उदाहरण के लिए, एक आईसीओम्पेर्बल इंटरफ़ेस आपको यह बताता है कि ऑब्जेक्ट का उपयोग केवल दिए गए परिदृश्य में तुलना के लिए किया जा रहा है)।

    7

    इंटरफ़ेस पृथक्करण सोलिड सिद्धांत पर "मैं" है, पहले के साथ बहुत गहराई से खोदने से पहले, समझाएं कि बाद का मतलब क्या है।

    सोल्ड को विशेषज्ञों द्वारा किए गए सर्वोत्तम प्रथाओं और सिफारिशों (जिसका अर्थ है कि वे पहले साबित हुए हैं) का एक सेट माना जा सकता है ताकि हम अनुप्रयोगों को कैसे डिजाइन कर सकते हैं। ये अभ्यास हमारे अनुप्रयोगों को बनाए रखने, विस्तार करने, अनुकूलित करने और स्केल करने में आसान बनाने का प्रयास करते हैं।

    मुझे सोल्ड प्रोग्रामिंग की परवाह क्यों करनी चाहिए?

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

    इंटरफ़ेस पृथक्करण सिद्धांत।

    पता है कि हम जानते हैं कि सॉलिड सिद्धांत क्या हैं, हम इंटरफ़ेस पृथक्करण सिद्धांत के बारे में अधिक जानकारी प्राप्त कर सकते हैं, लेकिन इंटरफ़ेस पृथक्करण वास्तव में क्या कहता है?

    इसका मतलब यह है कि कभी कभी हम तरीकों का एक बहुत है, जो एक के लिए अच्छा हो सकता है के साथ इंटरफेस बना देती हैं "ग्राहक अनावश्यक तरीके है जिसके वे का उपयोग नहीं होगा लागू करने के लिए मजबूर नहीं किया जाना चाहिए" हद तक, हालांकि यह आसानी से दुर्व्यवहार कर सकता है, और हम उन कक्षाओं के साथ समाप्त हो सकते हैं जो खाली या बेकार विधियों को लागू करते हैं जो निश्चित रूप से हमारे ऐप्स को अतिरिक्त कोड और बोझ जोड़ते हैं। कल्पना कीजिए कि आप एक वर्ग है कि एक अंतरफलक लागू कर रहा है दृश्य एड्स की तरह, एकल इंटरफेस में तरीकों का एक बहुत की घोषणा कर रहे हैं अगर तुम लेकिन वह वास्तव में यह करने के तरीकों की एक जोड़ी की जरूरत है इस प्रकार दिखाई देगा:

    enter image description here

    दूसरी ओर, यदि आप ठीक से इंटरफ़ेस अलगाव लागू करते हैं और छोटे सबसेट में अपने इंटरफेस विभाजित तुम मुझे उन है कि केवल जरूरत है को लागू करने के लिए सुनिश्चित कर सकते हैं:

    enter image description here

    मिलते हैं! रास्ता बेहतर है! इस सिद्धांत को लागू करने से आप कम युग्मन कर सकते हैं जो बेहतर रखरखाव और परिवर्तनों के लिए उच्च प्रतिरोध में सहायता करता है। तो आप वास्तव में इंटरफेस के उपयोग का लाभ उठा सकते हैं और जब आपको वास्तव में करना चाहिए तो विधियों को लागू करना। अब एक कम सार उदाहरण की समीक्षा करते हैं, तो आप

    public interface Reportable { 
    
         void printPDF(); 
         void printWord(); 
         void printExcel(); 
         void printPPT(); 
         void printHTML(); 
    
    
    } 
    

    समाचार-कहा जाता है एक इंटरफेस घोषित कहना और तुम एक ग्राहक है कि केवल एक्सेल प्रारूप में कुछ डेटा निर्यात करने जाएगा है, तो आप इंटरफ़ेस को लागू कर सकते हैं, लेकिन आप केवल होता एक्सेल विधि को लागू करने के लिए? जवाब नहीं है, आपको सभी तरीकों के लिए कार्यान्वयन को कोड करना होगा, भले ही आप उनका उपयोग नहीं कर रहे हों, इससे बहुत सारे जंक कोड हो सकते हैं जिससे कोड को बनाए रखने के लिए कड़ी मेहनत हो जाती है ..

    याद रखें यह सरल है और खुद को दोहराना न करें और आप पाएंगे कि आप बिना किसी जानकारी के इस सिद्धांत का उपयोग कर रहे हैं।

    +0

    यह ध्यान देने योग्य है कि "रसोई-सिंक" इंटरफ़ेस बिना किसी फायदे के हैं, उस कोड में जो उदा। 'रिपोर्ट करने योग्य' चीजों की एक सूची संग्रहित करें और बाद में उन्हें उपभोक्ता को खिलाएं, इस बारे में चिंता करने की ज़रूरत नहीं होगी कि उपभोक्ता को कौन सी विशेषताओं की आवश्यकता होगी, बशर्ते कि दिए गए वास्तविक उदाहरण उपभोक्ता की आवश्यकताओं को पूरा कर सकें। यह नहीं कहना कि केंद्रित इंटरफेस आमतौर पर एक अच्छी बात नहीं है, लेकिन कुछ बड़े होने से भी अच्छा हो सकता है। – supercat

    3

    इस सिद्धांत मुख्य रूप से जुड़वां प्रयोजनों

    • कार्य करता कोड अधिक पठनीय और प्रबंधनीय बनाने के लिए।

    • कक्षाओं (उच्च संयोजन) के लिए एकल जिम्मेदारी को बढ़ावा देता है। चिंता क्यों कक्षा में ऐसी विधि होनी चाहिए जिसका कोई व्यवहारिक प्रभाव न हो? क्यों न सिर्फ इसे हटा दें। Thats क्या आईएसपी के बारे में

    है कुछ सवाल है कि एक डिजाइनर आईएसपी

    • एक आईएसपी के साथ क्या प्राप्त करता है चिंताओं से पूछना चाहिए रहे हैं
    • कैसे करें मैं किसी भी के लिए पहले से मौजूद कोड का विश्लेषण आईएसपी उल्लंघनों

    इस चर्चा को आगे बढ़ाने के लिए, मुझे यह भी कहना चाहिए कि यह सिद्धांत सख्ती से एक 'सिद्धांत' नहीं है, क्योंकि कुछ परिस्थितियों में, आवेदन करना पठनीयता को बढ़ावा देने के बजाय डिजाइन के लिए आईएसपी, वस्तु संरचना को अपठनीय और अनावश्यक कोड के साथ अव्यवस्थित कर सकता है। आप इसे java.awt में देख सकते हैं।घटना पैकेज अपने ब्लॉग पर

    अधिक: http://design-principle-pattern.blogspot.in/2013/12/interface-segregation-principle.html

    0

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

    एक अधिक विस्तृत विवरण के लिए, का उल्लेख करने के Interface segregation principle article

    0

    ISP महत्वपूर्ण है।

    आईएसपी का मूल विचार: क्लाइंट को उन तरीकों पर निर्भर रहने के लिए मजबूर नहीं किया जाना चाहिए जो इसका उपयोग नहीं करते हैं।

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

    कोड उदाहरण के लिए एसई सवाल नीचे देखें:

    Interface Segregation Principle- Program to an interface

    लाभ:

    1. लचीलापन: आईएसपी के अभाव में, आप एक जेनेरिक फैट इंटरफ़ेस है और कई वर्गों को लागू करने यह। मान लें कि आपके पास 1 इंटरफ़ेस और 50 कक्षाएं थीं। यदि इंटरफ़ेस में कोई बदलाव है, तो सभी 50 वर्गों को अपना कार्यान्वयन बदलना होगा।

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

    2. रखरखाव और उपयोग की आसानी: चूंकि सामान्य जेनेरिक इंटरफ़ेस के बजाय परिवर्तन ठीक दानेदार इंटरफ़ेस तक सीमित हैं, कोड रखरखाव आसान है। असंबंधित कोड अब कार्यान्वयन वर्गों का हिस्सा नहीं है।

    संबंधित मुद्दे