2011-01-05 9 views
7

मुझे कुछ ऐसा मिला जो मैंने पहले कभी नहीं सुना था और मैं अब तक सहमत नहीं हूं (अब तक)। एक (ऊपर उल्लिखित और आगे टिप्पणी नहीं) answer मैंने पढ़ा है "एक ही पैकेज में कक्षा और इंटरफेस को मिश्रण क्यों करें"क्या यह 'एक ही पैकेज में वर्ग और इंटरफेस मिश्रण' करने के लिए बुरा अभ्यास है?

इसलिए मुझे आश्चर्य है कि यदि जावा में इंटरफेस और कार्यान्वयन को अलग करने के कारण हैं।

मुझे पता है कि हम इंटरफ़ेस के पैकेज में सभी कार्यान्वयन करने के लिए बाध्य नहीं हैं, लेकिन क्या यह कभी-कभी किसी के पास नहीं है?

सादर
माइक
[;-)

उत्तर

8

कारण:

स्पष्ट कोड बेस - यह है कि अगर हम इंटरफेस के साथ एक पैकेज और कार्यान्वयन के साथ एक और एक (आमतौर पर एक something.impl नाम स्थान) है 'लग रहा है' बेहतर, tidier। और कोड संरचना दिखाती है/प्रतिबिंबित करती है कि आप इंटरफेस के खिलाफ कोड करते हैं।

एक्सेस संशोधक - हम संबंधित इंटरफ़ेस कार्यान्वयन के लिए कुछ पैकेज निजी API के लिए पैकेज निजी एक्सेस संशोधक का उपयोग कर सकते हैं।

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

+0

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

3

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

उदाहरण के लिए

com.mycompany.domain.service 
com.mycompany.domain.service.impl 

लाभ:

  • वर्दी पैकेज संरचना
  • कुछ समय है जब आप केवल कुछ वर्गों पर कार्रवाई करना चाहते हैं, तो आप इसे पैकेज से अलग कर सकते हैं
7

ओएसजीआई के लिए यह लगभग फिर से है AFAIK अलग पैकेज का उपयोग करने के लिए निकाल दिया गया ताकि आप कार्यान्वयन को निर्यात/आयात किए बिना एपीआई निर्यात/आयात कर सकें।

इंटरफेस के लिए जो केवल आंतरिक रूप से हैं, हालांकि यह सब कुछ एक पैकेज में रखने में कोई समस्या नहीं है।

10

मैं org.life.java से सहमत हूं - मेरे पास सेवा और अंतर्निहित service.impl पैकेज होंगे, लेकिन हमेशा इस तरह की व्यवस्था में।

मैं "खराब अभ्यास" शब्द से असहमत हूं। यह बहुत मजबूत है।

java.util संग्रह API इस सलाह के साथ संघर्ष करता है। मैं यहोशू ब्लोच को बताने वाला नहीं बनना चाहता था कि उसने "बुरी नौकरी" की है। अलग संकुल में इंटरफेस और कार्यान्वयन रखने के लिए

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

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