2008-09-05 12 views
10

मैं एक नई प्रणाली तैयार कर रहा हूं और मेरे पास बहुत सारे इंटरफेस हैं जो सिस्टम के साथ समय के साथ बढ़ेगा। सबसे अच्छा अभ्यास इस इंटरफेसइंटरफेस और वर्जनिंग

ISomethingV01 
ISomethingV02 
etc 

और मैं तो मैं तो अब मैं क्या कर विधि 2 जोड़ने के लिए इस

public interface ISomething{ 
     void method(); 
} 

कर नाम के लिए क्या है?

public interface ISomethingV2:ISomething{ 
     void method2(); 
} 

या इसी तरह अन्य तरीके से?

उत्तर

5

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

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

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

भले ही आप ISomething, ISomething2 और ISomething3 बनाने के अंत में हैं, तो आपके इंटरफेस के उपभोक्ताओं को यह पता लगाना मुश्किल होगा कि इंटरफेस के बीच मतभेद क्या हैं। उन्हें ISomething2 का उपयोग कब करना चाहिए और उन्हें ISomething3 का उपयोग कब करना चाहिए? तो आपको ISomething और ISomething2 obsoleting की प्रक्रिया के बारे में जाना होगा।

2

एक इंटरफेस का उद्देश्य एक अमूर्त पैटर्न को परिभाषित करना है जिसे प्रकार को लागू करना चाहिए।

यह बेहतर होगा लागू के रूप में:

public interface ISomething 

public class Something1 : ISomething 
public class Something2 : ISomething 

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

2

मुझे नहीं पता कि लोग आपकी पोस्ट को क्यों कम करते हैं। मुझे लगता है कि अच्छे नामकरण दिशानिर्देश बहुत महत्वपूर्ण हैं।

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

प्रयास करें। यदि संक्षिप्त नाम नहीं है, तो संस्करण संख्या जोड़ने पर विचार करें।

4

मैं Garo Yeriazarian से सहमत हूं, इंटरफ़ेस बदलना एक गंभीर निर्णय है। साथ ही, यदि आप इंटरफ़ेस के नए संस्करण के उपयोग को बढ़ावा देना चाहते हैं तो आपको पुराने संस्करण को अप्रचलित के रूप में चिह्नित करना चाहिए। .NET में आप ObsoleteAttribute जोड़ सकते हैं।

6

मुझे लगता है कि आप इंटरफेस को ओवरराइड कर रहे हैं।

मेयर और मार्टिन ने हमें बताया: "विस्तार के लिए खोलें लेकिन संशोधन के लिए बंद!"

और फिर Cwalina (एट अल) को दोहराया:

फ्रेमवर्क डिजाइन दिशानिर्देश से ...

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

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

alt text