2010-11-12 19 views
5

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

परिदृश्य जिसमें मैं इसका उपयोग करूंगा: मैं उन वस्तुओं का एक सामान्य हैंडलर बनाना चाहता हूं, और मैं सामान्य पैरामीटर को लागू करने के लिए जेनेरिक पैरामीटर को लागू करना चाहता हूं जो इस विशेष इंटरफ़ेस को लागू करता है।

क्या यह एक खराब डिज़ाइन है, या खाली इंटरफेस स्वीकार्य हैं?

+0

दोहराना? http://stackoverflow.com/q/3162214/456188 – Crisfole

+0

@Cpfohl: मेरा प्रश्न उस लिंक के समान ही प्रतीत होता है जिसे आप लिंक करते हैं। ऐसा लगता है कि यह अन्य प्रश्न अधिक अस्पष्ट रूप से लिखा गया है ('देखी गई' गिनती की जांच करें), और प्रतिक्रियाओं में कम अच्छी तरह से कवर किया गया है। – Remus

+0

नहीं बताओ 'आपको इसे नीचे ले जाना है! :) अगर आप इससे कोई अतिरिक्त जानकारी प्राप्त करते हैं तो मैं इसे इंगित कर रहा हूं। – Crisfole

उत्तर

2

आप जो करने के बारे में बात कर रहे हैं उसे Marker Interfaces के नाम से जाना जाता है।

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

+0

तो * इसके लिए * नाम है ... धन्यवाद! – Remus

1

मेरी राय में उनके साथ कुछ भी गलत नहीं है। उनकी बहुत सारी शक्ति आंशिक कक्षाओं (जेनरेट) के साथ संयोजन में निहित है।

0

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

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

+0

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

+0

मैं प्रत्येक के लिए एक इंटरफ़ेस नहीं बनाउंगा, केवल एक इंटरफ़ेस जो किसी निश्चित नामस्थान के भीतर सभी ऑब्जेक्ट्स को कवर करता है। और, मेरे प्रश्न में धारणा यह है कि वास्तव में उनके बीच समानता नहीं है। – Remus

1

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

0

कुछ भी नहीं है ... एक खाली इंटरफ़ेस का उपयोग करने के साथ गलत, मुझे लगता है। बस, एक इंटरफ़ेस का बिंदु कार्यक्षमता के एक सामान्य सेट को परिभाषित करना है जो इसे कार्यान्वित करने में भिन्न हो सकता है।

यह कोडिंग को आसान नहीं बनायेगा, क्योंकि आप प्रभावी रूप से ब्लैक-बॉक्स (object) के साथ काम कर रहे हैं, क्योंकि कुछ इसे कॉल कर सकते हैं)।

ईमानदारी से, हालांकि, अगर मैं इस तरह के एक खुले अंतराल वास्तुकला को लागू कर रहा था, तो मैं नियमित रूप से पुराने object के साथ जाऊंगा।

1

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

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