2010-01-29 21 views
18

जावा में इंटरफेस अपनी निर्देशिका में रहना चाहिए? या दोनों इंटरफ़ेस और इसके कार्यान्वयन को एक ही निर्देशिका (पैकेज) में रखा जाना चाहिए? धन्यवाद।जावा इंटरफेस निर्देशिका संरचना?

+0

पैकेज को बिछाने के लिए तर्क के आधार पर, मैं अक्सर कार्यान्वयन को नामित करने के लिए 'impl' उप-पैकेज जोड़ता हूं, जैसे: com.stackoverflow.questions, com.stackoverflow.questions.impl। – Kylar

उत्तर

11

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

1

वही पैकेज। उपयोगकर्ता को यह पता नहीं होना चाहिए कि वे इंटरफ़ेस

+6

हां। 'I' उपसर्ग का उपयोग पागल है। –

+0

उपयोगकर्ता को यह जानने की जरूरत है कि उन्हें इन कक्षाओं को तुरंत चालू करना है या नहीं। – Powerlord

+2

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

14

मैंने जो पैटर्न देखा है, वह इंटरफेस को मूल निर्देशिका में रखना है, फिर कार्यान्वयन को वहां से एक उपनिर्देशिका में रखना है।

उदाहरण के लिए, इंटरफेस यहां जा सकते हैं:

com.myproject.data.dao.CustomerDao (some people do ICustomerDao for interfaces, but some don't like that.) 
com.myproject.data.dao.ProductDao 

और कार्यान्वयन यहां जा सकते हैं:

com.myproject.data.dao.hibernate.HibernateCustomerDao 
com.myproject.data.dao.hibernate.HibernateProductDao 
com.myproject.data.dao.someotherorm.SomeOtherOrmCustomerDao 
etc. 

यह कुछ स्थितियों में काम कर सकते हैं, और दूसरों में नहीं हो सकता है, लेकिन सिर्फ कुछ करने के लिए के बारे में सोचो।

+0

इस परिप्रेक्ष्य के लिए धन्यवाद – ken

+0

मैं इस परियोजना को एक परियोजना के लिए ले गया। मुझे एहसास हुआ कि मैं वास्तव में नहीं चाहता कि उपयोगकर्ताओं को इंटरफ़ेस के अलावा कुछ भी एक्सेस हो। मेरी समझ से, यह संभव नहीं है यदि कक्षाएं अपने स्वयं के पैकेज में विभाजित हों (पहुंच स्तर को सार्वजनिक होना आवश्यक है)। मैं आपके द्वारा दिए गए दृष्टिकोण को प्राथमिकता देता हूं, लेकिन अगर मैंने इसे दिया है तो यह अच्छी तरह से काम नहीं करता है। – abrarisme

0

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

-1

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

pureooabstraction/ 
| 
|_com/ 
    | 
    |_example/ 
    | 
    |__SomeInterface.java 
    |__SomeOtherInterface.java 

src/ 
| 
|_com/ 
    | 
    |_example/ 
    | 
    |__SomeClass.java 
    |__... 

कहाँ pureooabstraction/ निर्देशिका संरचना में केवल "शुद्ध अमूर्त वर्ग" (ओओ बिंदु से, जावा 'सार' परिभाषा नहीं), जावा में उर्फ ​​इंटरफेस शामिल होंगे।

और छोटे कार्यान्वयन विवरण (जो ओओए/ओओडी स्तर पर मौजूद नहीं हैं) जहां "कोड" झूठ src/ निर्देशिका में जाएगा।

यह निश्चित रूप से समझ में आता है कि आपकी विकास प्रक्रिया ओओए से ओओडी से ओओपी तक जाती है।

+0

नहीं, वह सिर्फ यह पूछ रहा था कि कार्यान्वयन के रूप में एक ही पैकेज में इंटरफेस डालना है या नहीं –

5

वहाँ पहले से ही कुछ अच्छी बातें बताई गई हैं रूप में, मैं बस चाहता हूँ एक बात जोड़ना:

कुछ परियोजनाओं हम भी अब तक चले गए हैं कि हम दूसरे में एक उप-परियोजना (Maven मॉड्यूल) और कार्यान्वयन में सभी इंटरफ़ेस रखा में एक। इस तरह कार्यान्वयन से इंटरफेस को पूरी तरह से अलग करना संभव था और परियोजना में बहुत जल्दी इंटरफ़ेस प्रोजेक्ट को अंतिम रूप देना और उन इंटरफेस को फिर से काम करने वाली अन्य टीमों को वितरित करना संभव था। प्रत्येक परियोजना के भीतर हमने एक ही पैकेज का इस्तेमाल किया।

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

0

जहां भी आप चाहते हैं, लेकिन एक ही पैकेज और निर्देशिका संरचना में इंटरफेस रखना बिल्कुल ठीक है। बस java api देखें। यदि आप किसी भी पैकेज का चयन करते हैं तो आप देखेंगे कि कई वर्ग और इंटरफेस दोनों हैं।कुछ इंटरफेस एक ही पैकेज में कक्षाओं द्वारा लागू किए जाते हैं, और कुछ नहीं हैं।

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

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

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