2012-05-19 39 views
5

मैं कोड के अगले टुकड़े है:क्या मुझे जादू तारों से बचना चाहिए?

internal static string GetNetBiosDomainFromMember(string memberName) 
    { 
     int indexOf = memberName.IndexOf("DC=", StringComparison.InvariantCultureIgnoreCase); 
     indexOf += "DC=".Length; 
     string domaninName = memberName.Substring(indexOf, memberName.Length - indexOf); 

     if (domaninName.Contains(",")) 
     { 
      domaninName = domaninName.Split(new[] { "," }, StringSplitOptions.None)[0]; 
     } 

     return domaninName; 
    } 

मैं ई के लिए कुछ parsings बनाने रहा हूँ, इसलिए मैं की तरह "डीसी =", "objectCategory =", "LDAP: //" कुछ तार है, ", ","। " अमुक। (। तुम्हें पता है, विरोध पाया सकता है चलो 'मुझे पता है)

private const string DcString = "DC="; 
    private const string Comma = ","; 

    internal static string GetNetBiosDomainFromMember(string memberName) 
    { 
     int indexOf = memberName.IndexOf(DcString, StringComparison.InvariantCultureIgnoreCase); 
     indexOf += DcString.Length; 
     string domaninName = memberName.Substring(indexOf, memberName.Length - indexOf); 

     if (domaninName.Contains(CommaString)) 
     { 
      domaninName = domaninName.Split(new[] { CommaString }, StringSplitOptions.None)[0]; 
     } 

     return domaninName; 
    } 

यहां तक ​​कि मैं "डीसी" और हो सकता है "डीसी =", मैं में सोचना चाहिए: मैं ऊपर कोड नीचे दिए गए कोड की तुलना में अधिक पठनीय पाया । इस चर के लिए या दो में इन विभाजित :(तो मेरे सवाल का नाम: मैं संभव के रूप में जादू तार से बचें

UPDATED

कुछ निष्कर्ष:।

  • तारों का उपयोग करने से बचने के तरीके हैं, जो बेहतर हो सकते हैं। इसे प्राप्त करने के लिए उपयोग किया जा सकता है: स्थैतिक वर्ग, गणक, संख्यात्मक स्थिरांक, आईओसी कंटेनर और यहां तक ​​कि प्रतिबिंब।
  • एक निरंतर स्ट्रिंग आपको यह सुनिश्चित करने में सहायता करती है कि आपके पास कोई टाइपो नहीं है (स्ट्रिंग के सभी संदर्भों में)।
  • विराम चिह्न के लिए लगातार तारों में कोई वैश्विक अर्थशास्त्री नहीं है। इनका उपयोग करने के लिए और अधिक पठनीय होगा क्योंकि वे "," हैं। इस मामले के लिए निरंतर उपयोग करें यदि भविष्य में वह स्थिरता बदल सकती है, जैसे ""। (निरंतर आपके पास उस रिफैक्टरिंग में मदद कर सकता है हालांकि resharper के रूप में आधुनिक उपकरण स्थिर या चर की आवश्यकता के बिना ऐसा करते हैं)।
  • यदि आप इसे लगातार स्थिर करने की आवश्यकता नहीं होने पर केवल स्ट्रिंग का उपयोग करते हैं। हालांकि इस बात पर विचार करें कि निरंतर दस्तावेज़ीकरण और दस्तावेज में दिखाया जा सकता है (जावाडॉक्स के रूप में)। गैर-तुच्छ स्ट्रिंग मानों के लिए यह महत्वपूर्ण हो सकता है।
+1

मुझे लगता है कि आपको [इस] में रुचि हो सकती है (http://programmers.stackexchange.com/questions/142278/are-nullable-types-preferable-to-magic-numbers) विषय। – Torv

+0

मुझे लगता है कि आप मेनमा से जवाब का लक्ष्य रखते हैं, है ना? –

+0

हाँ आप सही हैं। ओह मैंने स्थापित किया [एक और दिलचस्प विषय] (http://programmers.stackexchange.com/questions/145738/should-a-string-constant-be-defined-if-its-only-going-to-be-used-once) तुम्हारे लिए। ये विषय प्रश्न का उत्तर नहीं देते हैं लेकिन वे दिलचस्प =) – Torv

उत्तर

1

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

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

+0

अच्छा लगता है, "," जैसे तार। "।", "/", "//", "=" हार्ड कोडित हो सकता है। हालांकि मैं DcString + EqualString जैसे कुछ से बचना चाहता हूं। –

+0

हां, उनके पास कोई वैश्विक अर्थशास्त्री नहीं है।वह परीक्षा है। –