2012-01-13 10 views
12

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

उदाहरण के लिए: https://github.com/halfninja/android-dragcontrol3d/tree/master/src/uk/co/halfninja/android शायद सबसे खराब उदाहरण नहीं है यही कारण है कि है, लेकिन वहाँ दो फ़ोल्डर्स "ब्रिटेन" और "सह" है कि बस मतलब नहीं है कर रहे हैं। मैं इसे केवल जावा स्रोतों में देखता हूं!

और उदाहरण minicraft के लिए: http://www.ludumdare.com/compo/ludum-dare-22/?action=preview&uid=398

import com.mojang.ld22.gfx.Font; 
import com.mojang.ld22.gfx.Screen; 
import com.mojang.ld22.gfx.SpriteSheet; 

क्यों सिर्फ लिख नहीं:

import gfx.Font; 
import gfx.Screen; 
import gfx.SpriteSheet; 

इतना क्लीनर है कि।

(मैं जावा में कभी नहीं प्रोग्राम किया गया है।)

+1

क्या होगा यदि मैंने एक जीएफएक्स लाइब्रेरी बनाई है, और आपने एक बनाया है - जो भी दोनों का उपयोग करने की आवश्यकता है, उसके लिए एक संघर्ष होगा। – nos

+0

जो आप 'फ़ोल्डर' के रूप में सहजतापूर्वक वर्णन करते हैं, इसका अर्थ यह नहीं है। आप पहचान सकते हैं कि वे डोमेन नाम उलटा हैं: डोमेन नाम 'mojang.com' के लिए 'com.mojang'। उद्देश्य बिल्कुल वही है: एक अद्वितीय नाम प्रदान करना। देखें: http://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html – mins

+1

यह एक अच्छा सवाल है, और ऐसा लगता है कि किसी ने भी पर्याप्त उत्तर नहीं दिया है। नीचे दिए गए सभी उत्तरों का कहना है कि यह अन्य पैकेजों के साथ संघर्ष को रोकने के लिए है। नेस्टिंग कक्षाएं कई उपफोल्डर गहरे * काम * संघर्षों को रोकने में मदद करते हैं, लेकिन फाइल सिस्टम को इस तरह से * दुरुपयोग किए बिना इसे प्राप्त करने के लिए बहुत साफ तरीके हैं। उदाहरण के लिए, प्रत्येक व्यवसाय में "संगठन" फ़ोल्डर हो सकता है उदा। 'com.company.section' और फिर उस फ़ोल्डर के भीतर, कक्षाओं को 'योग्य.package.ClassName.class' या यहां तक ​​कि' योग्य/पैकेज/ClassName.class' भी नामित किया जा सकता है। – ricovox

उत्तर

7

ये वहाँ अन्य जार के साथ संघर्ष को रोकने के लिए कर रहे हैं। पैकेज नाम में कंपनी यूआरएल की तरह कुछ होने से यह किसी और के पैकेज और कक्षाओं के साथ संघर्ष न करने के लिए पर्याप्त अद्वितीय हो सकता है।

आपका उदाहरण एक अच्छा है, क्योंकि यह लगता है कि "gfx" को पैकेज नाम के रूप में और फ़ॉन्ट या स्प्राइट जैसी कक्षाओं के उपयोग के बारे में सोचने के लिए दो लोगों की कल्पना करना उचित लगता है। अब, यदि आप दोनों का उपयोग करना चाहते हैं, तो आप पैकेज और क्लास नाम के नाम से कैसे हो सकते हैं?

+2

सिर्फ एक उपफोल्डर इस समस्या को ठीक नहीं करेगा? उदाहरण के लिए 'minicraft.gfx.Font'? मुझे सबसे ज्यादा समझ में आता है। – Rookie

+0

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

+4

मैं सोच रहा था, क्यों न केवल एक फ़ोल्डर का उपयोग करें? 'com_mojang_ld22.gfx.Font' क्या इससे कोई समस्या आएगी? कम से कम इतने सारे सबफ़ोल्डर नहीं होंगे। – Rookie

3

आपका रास्ता क्लीनर है, लेकिन ऐसा लगता है कि दुनिया में कोई और भी gfx नामक पैकेज बनाने जा रहा है, जो एक बहुत ही कमजोर धारणा है। अपने उलट डोमेन नाम को प्रीपेड करके, आप एक अनन्य नेमस्पेस बनाते हैं जो टकराव से बचाता है।

यह जावा प्रोग्रामिंग में व्यापक रूप से "साझा करने की संस्कृति" के साथ फिट बैठता है, जिसमें अनुप्रयोग आमतौर पर कई स्रोतों से बड़ी पुस्तकालयों को जोड़ते हैं।

+0

जहां मैं अभी काम कर रहा हूं, हमारे पास एक ही चीज करने वाली कई टीमें हैं। तो यह नामकरण सम्मेलन टकराव को रोकता नहीं है। इसके अतिरिक्त, मैं "पूरी दुनिया" के बारे में क्यों ख्याल रखता हूं और न केवल उन चीजों को जो मैं अपने प्रोजेक्ट में जोड़ रहा हूं? – Sqeaky

+1

ठीक है, @ स्क्केकी, वे बस गलत कर रहे हैं। यदि आपकी कंपनी में पैकेज नामों का कोई केंद्रीय प्राधिकरण नियंत्रण नहीं है, तो प्रत्येक प्रोजेक्ट या टीम को कंपनी के नाम के नीचे एक अद्वितीय पैकेज का उपयोग करना चाहिए: यही वह है जहां हम काम करते हैं। जहां तक ​​आपको पूरी दुनिया की परवाह नहीं करनी चाहिए, अगर आपको यकीन है कि आपका कोड कभी भी आपके संगठन के बाहर साझा नहीं किया जाएगा, तो इससे कोई फर्क नहीं पड़ता। लेकिन सार्वजनिक रूप से उपलब्ध जावा पुस्तकालयों की उल्लेखनीय संख्या के रूप में, जावा कोड का अंततः अंततः साझा हो रहा है। –

1

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

इस तरह के अधिक विशिष्ट होने के कारण नामस्थानों की आकस्मिक रूप से एक दूसरे के साथ टकराने की संभावना कम हो जाती है।

0

यदि आप सभी के साथ कोड साझा करना चाहते हैं, लेकिन बिना किसी संघर्ष के सामान्य नामों का उपयोग करें। इसे डोमेन नाम (पिछला)

प्रत्येक व्यक्ति को gfx.Font नामक एक पैकेज लिखने के लिए अच्छा अभ्यास माना जाता है, तो आप उसी एप्लिकेशन में एक से अधिक संस्करणों का उपयोग करने में सक्षम नहीं होंगे।

आपको लगता है कि आपका कोड दुनिया के साथ साझा नहीं किया जाएगा (या यहां तक ​​कि साझा नहीं किया जाना चाहिए) इस मामले में, एक छोटी पैकेज संरचना सरल हो सकती है।

यदि आप आईडीई का उपयोग करते हैं, तो यह लंबे पैकेज संरचनाओं को छिपाने का अच्छा काम करता है, इसलिए आपको इसके बारे में चिंता करने की आवश्यकता नहीं है।

1

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

0

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

  • कॉम = या तो इस या संगठन, सरकारी पैकेज के लिए जावा/javax
  • Mojang = दूसरे भाग है कंपनी का नाम
  • ld22 = तीसरे भाग आवेदन नाम है
: com.mojang.ld22 हिस्सा सिर्फ एक सम्मेलन है
+0

मुझे लगता है कि ld22 प्रतियोगिता का नाम है, मिनीक्राफ्ट ऐप का नाम होना चाहिए, जो कुछ कारणों से गुम है – Rookie

+0

बेशक यह लुडम डियर 22 के लिए है, उसने वास्तविक परियोजना नाम के बजाय इसका उपयोग करना चुना है। वैसे भी कोई अस्पष्टता नहीं है, और नोटच को जानकर उसने शायद चुनौती के माध्यम से आधे रास्ते का वास्तविक नाम तय किया। – Viruzzo

0

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

1

यह लगभग नामस्थान है। 'नेमस्पेस' के साथ, आप अलग-अलग पैकेज/फ़ोल्डरों में स्थित एक ही नाम के साथ 2 कक्षाएं बना सकते हैं।

1) Namespace 2) Java Package 3) Java Package Naming Conventions

संपादित करें: हमें लगता है कि आप बना रहे हैं चलो यह नाम स्थान तर्क भी नीचे कुछ लिंक हैं 'पहुंच विशेषाधिकार, वगैरह वगैरह बनाने के लिए इस्तेमाल किया जा सकता एक नई परियोजना और कंपनियों/संगठनों - कॉमा और कॉमब से 2 ओपन सोर्स फ्रेमवर्क का उपयोग कर रहे हैं। साथ ही, मान लें कि कॉमए और कॉमब ने एक ही कक्षा नाम के साथ अपनी परियोजनाओं में एक कक्षा बनाई है। अब, जावा पैकेज नामकरण सम्मेलनों के साथ, हमारे पास com.comA.SomeClass और com.comB.SomeClass है। आप संघर्ष के बिना, अपनी कक्षा में दोनों वर्गों को आयात और उपयोग कर सकते हैं। यह सिर्फ एक साधारण उदाहरण है। इस नामकरण सम्मेलन से अन्य उपयोग भी हैं।

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

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