2010-07-12 19 views
19

वर्तमान संस्कृति या InvariantCulture निर्दिष्ट करने के लिए सबसे अच्छा अभ्यास क्या है और संस्कृति को बिल्कुल निर्दिष्ट नहीं है?मुझे वर्तमान संस्कृति या InvariantCulture कब निर्दिष्ट करना चाहिए और मुझे इसे कब निर्दिष्ट नहीं किया जाना चाहिए?

से मैं क्या पढ़ा है, अगर आप क्रमबद्धता कर रहे हैं, उदाहरण के लिए, आप InvariantCulture एक डेटा मूल्य का एक विहित प्रतिनिधित्व निर्दिष्ट करने के साधन के रूप की जरूरत है। यह संस्कृति-आधारित स्ट्रिंग मैनिप्लेशंस का अपेक्षाकृत छोटा प्रतिशत है।

मैं इसे, लंबे वर्बोज़, और बदसूरत समय की सबसे यह हर बार मुझे क्या निर्दिष्ट करने के लिए मिल जाए, कहते हैं:

var greeting = string.Format(CultureInfo.CurrentCulture, "Hello ", userName); 

हालांकि, मेरी टीम ने हाल ही में FxCop चालू है और अब वहाँ हमेशा उपयोग करने के लिए एक धक्का है संस्कृतिइन्फो हर जगह। ब्रेवटी, पठनीयता और कार्यक्षमता को गठबंधन करने के लिए सबसे अच्छी तकनीक क्या है?

कुछ अच्छी पठन सामग्री:

उत्तर

16

वहाँ एक अंतर्निहित खेलने में यहाँ व्यापार बंद है।

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

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

बहरहाल, यह निर्दिष्ट करने, के रूप में आपने देखा, अपने कोड का आकार बढ़ाने के लिए, और संभवतः पठनीयता को कम करता है। इससे छोटे कोड बनाम उचित अंतर्राष्ट्रीयकरण और स्थानीयकरण और रखरखाव के माध्यम से हर जगह अधिक स्पष्ट होने के माध्यम से व्यापार-बंद - पठनीयता और रखरखाव की ओर जाता है।

मेरी राय में, कोई "सही" यहाँ का जवाब - यह वास्तव में आपके आवेदन पर निर्भर करता है। यदि आपका आवेदन प्रेजेंटेशन के बारे में पूरी तरह से है, और बहुत से डेटा मैनिपुलेशन नहीं कर रहा है, खासकर किसी भी प्रकार के स्वयं-प्रबंधित फ़ाइल स्टोरेज के साथ, वर्तमान संस्कृति (और ui संस्कृति) को सेट करना ठीक हो सकता है। मैंने पाया है कि अधिक जटिल अनुप्रयोग इस फैशन में भी काम नहीं करते हैं, हालांकि, इस मामले में FxCop सुझावों को हर जगह निर्दिष्ट करने के सुझाव अधिक आकर्षक लगते हैं।

+1

@ रीड कॉपसी: मैंने यह भी पाया है कि इसे हर जगह एक FxCop रिफ्लेक्स के रूप में जोड़ना बग बनाता है - कई बार मैंने ऐसे उदाहरण देखे हैं जहां गलत संस्कृति विकल्प निर्दिष्ट किया गया था। यह स्पष्ट रूप से केवल एक शिक्षा समस्या है, लेकिन एक आम घटना है जब FxCop की तरह कुछ आपको चीजों को करने के लिए कहता है लेकिन आपको जरूरी नहीं समझना चाहिए कि क्यों। –

+2

@ स्कॉट: सच। लेकिन प्रोग्रामिंग में सब कुछ के साथ यह मामला है - यदि आप इसका उपयोग करने जा रहे हैं तो आपको इसे समझने की ज़रूरत है या यह आपको काट देगा। स्थानीयकरण करने का एकमात्र तरीका यह है कि जब आप पहली बार कोड लिखते हैं तो इसे मानना ​​है - एक पूरा उत्पाद स्थानीयकरण करना सबसे बुरी नौकरियों में से एक है, और परिमाण का क्रम शुरुआत से इसके बारे में सोचने से अधिक महंगा है। –

+0

मैं सहमत नहीं हूं। क्या मैं अपनी कक्षाओं के सभी ToString() में संस्कृति डालूंगा? मुझे लगता है कि तर्क और वस्तुओं को संस्कृति से अनजान होना चाहिए। – onof

5

डिफ़ॉल्ट रूप से विंडोज़ द्वारा शुरू की गई डिफ़ॉल्ट रूप से वर्तमान संस्कृति है। तो CultureInfo.CurrentCulture का उपयोग स्पष्ट रूप से समय की बर्बादी है। कोई भी सभ्य क्रमबद्धता प्रारूप (बाइनरी क्रमबद्धता और एक्सएमएल क्रमबद्धता सहित) एक संस्कृति परिवर्तनीय तरीके से डेटटाइम को क्रमबद्ध करेगा।

एक संस्कृति है कि डिफ़ॉल्ट नहीं है का उपयोग करना बहुत खतरनाक है। एक थ्रेड हमेशा डिफ़ॉल्ट संस्कृति के साथ शुरू किया जाएगा जैसा कि विंडोज द्वारा निर्दिष्ट किया गया है और जब उसने विंडोज़ स्थापित किया है तो उपयोगकर्ता द्वारा कॉन्फ़िगर किया गया है। .NET हर समय थ्रेडपूल थ्रेड शुरू करता है और आपको उस थ्रेड में एक संस्कृति प्राप्त करने का जोखिम होगा जो आपके मुख्य धागे से अलग है। जो सभी तरह की सूक्ष्म समस्याओं का कारण बन सकता है। सॉर्टेडलिस्ट होने की तरह अचानक अचानक सॉर्ट नहीं किया गया है।

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

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