जावा में उपयोगिता वर्गों के लिए नामकरण सम्मेलन


115

जावा में उपयोगिता कक्षाएं लिखते समय, कुछ अच्छे दिशानिर्देशों का पालन करना क्या है?

क्या पैकेट "उपयोग" या "बर्तन" होना चाहिए? क्या यह ClassUtil या ClassUtils है? एक वर्ग "हेल्पर" या "उपयोगिता" कब है? उपयोगिता या उपयोगिताएँ? या आप उनमें से एक मिश्रण का उपयोग करते हैं?

मानक जावा लाइब्रेरी उपयोग और उपयोगिता दोनों का उपयोग करती है:

  • javax.swing.Utilities
  • javax.print.attribute.AttributeSetUtilities
  • javax.swing.plaf.basic.BasicGraphicsUtils

अपाचे विभिन्न प्रकार के यूटिल और यूटिल्स का उपयोग करता है, हालांकि ज्यादातर यूटिल्स:

  • org.apache.commons.modeler.util.DomUtil
  • org.apache.commons.modeler.util.IntrospectionUtils
  • org.apache.commons.io.FileSystemUtils
  • org.apache.lucene.wordnet.AnalyzerUtil
  • org.apache.lucene.util.ArrayUtil
  • org.apache.lucene.xmlparser.DOMUtils

वसंत हेल्पर और यूटिल्स वर्गों का उपयोग करता है:

  • org.springframework.web.util.UrlPathHelper
  • org.springframework.core.ReflectiveVisitorHelper
  • org.springframework.core.NestedExceptionUtils
  • org.springframework.util.NumberUtils

तो, आप अपनी उपयोगिता कक्षाओं का नाम कैसे देते हैं?

जवाबों:


82

ऐसे कई सम्मेलनों की तरह, जो महत्वपूर्ण है वह इतना नहीं है कि आप किस सम्मेलन का उपयोग करते हैं, क्योंकि आप इसका लगातार उपयोग करते हैं। जैसे, यदि आपके पास तीन उपयोगिता वर्ग हैं और आप उन्हें कस्टमर यूटिल, प्रोडक्ट यूटिल्स, और स्टोर यूटिलिटी कहते हैं, तो आपके वर्ग का उपयोग करने की कोशिश करने वाले अन्य लोग लगातार भ्रमित हो रहे हैं और गलती से कस्टमर यूटिल्स टाइप करें, इसे देखना होगा, आपको कुछ बार शाप देना होगा, आदि (मैंने एक बार स्थिरता पर एक व्याख्यान सुना, जहां स्पीकर ने एक स्लाइड को तीन मुख्य बिंदुओं के साथ अपने भाषण की रूपरेखा दिखाते हुए, "1", "2", और "सी") लेबल किया।

कभी भी कभी दो नाम न बनाएं जो केवल वर्तनी की कुछ सूक्ष्मता में भिन्न होते हैं, जैसे कि CustomerUtil और CustomerUtility होना। यदि दो कक्षाएं बनाने का एक अच्छा कारण था, तो उनके बारे में कुछ अलग होना चाहिए, और नाम कम से कम हमें एक सुराग देना चाहिए कि वह अंतर क्या है। यदि किसी में नाम और पते से संबंधित उपयोगिता फ़ंक्शंस हैं और दूसरे में ऑर्डर से संबंधित उपयोगिता फ़ंक्शंस हैं, तो उन्हें CustomerNameAndAddressUtil और CustomerOrderUtil या कुछ ऐसे कॉल करें। मैं नियमित रूप से पागल हो जाता हूं जब मैं नामों में व्यर्थ सूक्ष्म अंतर देखता हूं। कल की तरह ही मैं एक ऐसे कार्यक्रम पर काम कर रहा था जिसमें माल ढुलाई लागत के तीन क्षेत्र थे, जिसका नाम "फ्रेट", "फ्रेटकॉस्ट" और "फ्रेट" था। मुझे यह पता लगाने के लिए कोड का अध्ययन करना पड़ा कि उनके बीच क्या अंतर था।


9
और 4 नंबर :-) के लिए चतुर्थ - लेकिन क्या था के बीच अंतर भाड़ा , freightcost , और frght ?
काजमग्नस

4
@KayMagnus वह पोस्ट एक साल पहले खत्म हो गया था, लेकिन जैसा कि मुझे याद है, उनमें से एक रिकॉर्ड पर वर्तमान माल ढुलाई लागत थी, आदेश की सामग्री को बदलने से पहले और इस प्रकार संभवतः माल ढुलाई लागत; एक और मानक भाड़ा एक टेबल से लिया गया था; और तीसरा कुछ विशेष मामलों में उपयोग की जाने वाली गणना लागत थी, जैसे विदेशी शिपमेंट। जैसे कि वे कम से कम उन्हें क्यों नहीं कह सकते थे, जैसे कि "क्यूरफ्राइट", "स्टडफाइट", और "कैल्सफ्राइट"। कम से कम एक क्लू दिया होता।
जय

ठीक है, स्पष्टीकरण के लिए धन्यवाद :-) एक दिलचस्प अजीब-कोड उदाहरण मुझे लगता है
काजमग्नस

31

इसके लिए जावा दुनिया में कोई मानक नियम / सम्मेलन नहीं है। हालाँकि, मैं कक्षा के नाम के अंत में "s" जोड़ना पसंद करता हूँ जैसा कि @colinD ने उल्लेख किया है।

यह मास्टर जावा एपीआई डिजाइनर जोश बलोच (जावा संग्रह के साथ-साथ Google संग्रह) के लिए बहुत मानक लगता है

जब तक हेल्पर और यूटिलिट जाता है, मैं कुछ हेल्पर को कॉल करूंगा जब उसके पास एपीआई होगा जो पैकेज की एक विशिष्ट कार्यक्षमता को प्राप्त करने में मदद करता है (पैकेज को एक मॉड्यूल के रूप में लागू करने पर विचार करता है); मतलब है जबकि किसी भी संदर्भ में एक Util कहा जा सकता है

उदाहरण के लिए, बैंक खातों से संबंधित एक आवेदन में, सभी नंबर विशिष्ट उपयोगिता स्टेटिक API को जाना जाएगा org.mycompany.util.Numbers

एपीआई को मदद करने वाले सभी "खाता" विशिष्ट व्यवसाय नियम

org.mycompany.account.AccountHelper

आखिरकार, यह बेहतर प्रलेखन और क्लीनर कोड प्रदान करने की बात है।


5
यह उचित प्रतीत होता है, कि हेल्पर अधिक विशिष्ट होगा जो कि यूटिल्स।
काजागमनस

1
हां, मुझे यह तरीका पसंद है, यह अधिक तार्किक है।
कॉनन

3
लिंक टूट गया है। मुझे एक और मिला ।
चावजो

22

जब एक इंटरफ़ेस या एक वर्ग जिसे आप नियंत्रित नहीं करते हैं, तो मैं "s" टाइप नाम के सम्मेलन को पसंद करता हूं। JDK में उस के उदाहरण शामिल हैं Collectionsऔर Executors। यह Google संग्रह में उपयोग किया जाने वाला सम्मेलन भी है।

जब आप एक ऐसे वर्ग के साथ काम कर रहे होते हैं जिस पर आपका नियंत्रण होता है, तो मैं कहूंगा कि उपयोगिता विधियाँ आम तौर पर वर्ग पर ही होती हैं।


2
Google अमरूद भी इसी पैटर्न का उपयोग करता है
Jherico

11

मुझे लगता है कि 'बर्तन' पैकेज का नाम होना चाहिए। वर्ग के नामों को उसके अंदर तर्क के उद्देश्य को निर्दिष्ट करना चाहिए। उपसर्ग-जोड़ (s) निरर्थक है।


2
एक 'पैकेज बाय फीचर' दृष्टिकोण में करना सही नहीं होगा ।
jpangamarca

1
@jpangamarca आपके द्वारा लिंक किए गए लेख में "सुविधा द्वारा पैकेज" के लिए उदाहरण में "उपयोग" पैकेज है। मुझे लगता है कि व्यवहार में किसी प्रकार की उपयोग सुविधा / परत को अक्सर टाला नहीं जा सकता।
kapex

1
मुझे लगता है कि लेखक से @kapex एक निरीक्षण। एक tld.organization.app.utilपैकेज मौजूद नहीं होना चाहिए (हो सकता है, लेकिन नहीं होना चाहिए), किसी भी संख्या में tld.organization.app.feature.utilपैकेज पूरी तरह से ठीक हैं।
14:27 पर jpangamarca

3

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.