2009-02-15 10 views
5

हाल ही में, मैं बहुत सारे जावा कोड में आया हूं जो कॉन्फ़िगरेशन के लिए "गुण फ़ाइलें" पर निर्भर करता है। लेकिन सादे पुराने स्ट्रिंग अक्षर के बजाय, कोड संपत्ति मूल्यों को पुनर्प्राप्त करने के लिए स्थिरांक (स्थिर अंतिम स्ट्रिंग) का उपयोग करता है।संपत्ति कुंजी के लिए स्थिरांक का उपयोग करने का क्या मतलब है?

मैं क्योंकि मैं में या तो दिशा दो लुकअप को निष्पादित करना होगा अविवेक कष्टप्रद की इस अतिरिक्त स्तर पाते हैं। अगर मैं कॉन्फ़िगरेशन फ़ाइल में देखी गई संपत्ति से शुरू करता हूं, तो मुझे जावा निरंतर खोजने के लिए पहले संपत्ति नाम की खोज करनी होगी, और फिर कोड में निरंतर संदर्भों को खोजने के लिए फिर से खोजना होगा। अगर मैं कोड में शुरू करता हूं, तो मुझे कॉन्फ़िगरेशन फ़ाइल में संपत्ति का मान निर्धारित करने से पहले स्थिरता का वास्तविक मान मिलना होगा!

क्या बात है?

मैं संसाधन बंडल में संदर्भ कुंजी के लिए स्थिरांक का उपयोग करने के मूल्य को समझता हूं, आमतौर पर i18n के समर्थन में। मैं सरल, गैर-उपयोगकर्ता-सामना करने वाले कॉन्फ़िगरेशन मानों का जिक्र कर रहा हूं। केवल कारण मैं सोच सकता हूं कि बाद में संपत्ति का नाम बदलना आसान हो गया है, लेकिन यह लाभ परेशानी आईएमएचओ से काफी कम है, विशेष रूप से वैश्विक खोज और प्रतिस्थापन की आसानी के कारण।

उत्तर

6

यदि किसी मूल्य को पुन: संकलन के बिना बदला जाना आवश्यक है तो आपको अनिवार्य रूप से कुछ पुनर्निर्देशन की आवश्यकता है, लेकिन एक और काम करना तब तक मूर्खतापूर्ण है जब तक कुंजी को एक से अधिक स्थानों में संदर्भित करने की आवश्यकता न हो (स्वयं चिंताओं के खराब अलगाव का संभावित संकेत)।

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

यदि आपको इस के आराम को उचित ठहराने के लिए उन्हें वैकल्पिक दिशानिर्देश उद्धृत करने की आवश्यकता है तो क्या मैं KISS का सुझाव दे सकता हूं।

+0

कई संदर्भों के बारे में उत्कृष्ट बिंदु खराब गंध है! यह संकेतक * और * वैश्विक एस एंड आर की आवश्यकता दोनों को समाप्त करता है! – jcrossley3

0

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

मुझे लगता है कि यह जेफ और जोएल the last podcasts पर बात कर रहे सामानों का एक उदाहरण है, जहां डेवलपर्स अंधेरे से अभ्यास कर रहे हैं जिसके बारे में उन्होंने सुना है (इस मामले में, अभ्यास में कभी भी एक स्ट्रिंग अक्षर नहीं है कोड) इस बारे में सोचने के बिना कि क्या यह मामला हाथ में वास्तव में उचित है या नहीं।

+0

हां, यदि केवल एक बार संदर्भित निरंतर है तो इसका मूल्य संदिग्ध है। एक अकेले संदर्भित स्थिर होने के बाद * स्थिर हो सकता है यदि निरंतर नाम एक जादू संख्या को प्रतिस्थापित करता है, लेकिन इस मामले में भी यह लागू नहीं होता है। हालांकि, यदि कुंजी नाम पूरे कोड में दिखाई देते हैं तो मैं स्थिरांक के साथ रहूंगा। – dwc

+0

हालांकि इस मामले में? एक संपत्ति कुंजी नाम कभी क्यों बदल जाएगा? यह वह मूल्य है जो बदलने की अधिक संभावना है। – bpapa

+0

यदि एप्लिकेशन उन संकेतों का उपयोग करता है, तो लुकअप करने के लिए फ़ंक्शंस मौजूद होना चाहिए। फ़ाइलों को स्वयं खोजने के बजाय उन कार्यों को कॉल करने के लिए एक 4 पंक्ति मुख्य फ़ंक्शन लिखें। अच्छे प्रोग्रामर आलसी हैं। –

11

एक बात के लिए, आप कंपाइलर त्रुटि प्राप्त किए बिना स्थिरांक का उपयोग करते समय चाबियों को गलत टाइप नहीं कर सकते हैं।

+0

मैं सहमत हूं कि "टाइपो तर्क" के विकास के दौरान कुछ मूल्य है, लेकिन उत्पादन के मुद्दों को डीबग करने पर नहीं। और मैं तर्क दूंगा कि उपयुक्त यूनिट परीक्षण टाइपोज के जोखिम को कम करते हैं (उत्पादन के मुद्दों के बारे में कुछ भी नहीं कहने के लिए), इसलिए संकेत की लागत अभी भी लाभ से काफी अधिक है। – jcrossley3

5

स्थिर वैश्विक खोज और प्रतिस्थापन (जो एक नई बात नहीं है) के दिन भी स्थिरता का उपयोग करके आप जानते हैं कि स्ट्रिंग सिर्फ उस संपत्ति फ़ाइल के लिए है। यह अच्छा है क्योंकि:

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

कई मामलों में, यह सिर्फ एक अच्छी आदत है कि प्रोग्रामर मिलते हैं, लेकिन एक कारण के लिए अच्छी आदतें हैं।

0

क्योंकि स्वत: पूर्ण स्थिरांक के लिए पहचानकर्ताओं पर बेहतर काम करता है, लेकिन यदि आपके सभी महत्वपूर्ण मान "com.foo.bar.whatever" हैं तो आपको कोई प्रतिक्रिया नहीं मिलती है।

+0

लगता है कि आईडीई के लिए गुण फ़ाइलों के लिए बेहतर समर्थन है। – bpapa

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