2012-05-19 10 views
5

Ich habe das nächste Stück Code:Soll ich magische Saiten wie möglich vermeiden?

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; 
    } 

ich einige parsings für AD zu machen, so habe ich einige Zeichenketten wie "DC =", "object =", "LDAP: //",“, ",". " so und so. fand ich den obigen Code besser lesbar als der Code unten: (. Sie können die gegenüberliegenden gefunden, lass‘mich wissen)

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; 
    } 

Auch kann ich‚DC‘und‚DC =‘, denke ich sollte in die Namen für diese Variablen oder teilen diese in zwei :(Dann meine Frage:. Soll ich Magie Saiten wie möglich zu vermeiden

AKTUALISIERT

Einige Schlussfolgerungen:.

  • Es gibt Möglichkeiten, Strings überhaupt zu vermeiden, die besser sein könnten. Um es zu erreichen, könnte es verwendet werden: statische Klassen, Enumeratoren, numerische Konstanten, IOC-Container und sogar Reflexion.
  • Eine konstante Zeichenfolge hilft Ihnen sicherzustellen, dass Sie keine Tippfehler haben (in allen Verweisen auf eine Zeichenfolge).
  • Konstante Zeichenfolgen für Interpunktion haben keine globale Semantik. Wäre lesbarer, diese zu verwenden, wie sie sind ",". Eine Konstante für diesen Fall kann in Betracht gezogen werden, wenn sich diese Konstante in der Zukunft ändern kann, wie zum Beispiel die Änderung "," von "." (Haben Sie eine Konstante kann Ihnen helfen, in diesem Refactoring, obwohl moderne Werkzeuge wie Nachzerhacker tun dies ohne Notwendigkeit einer Konstante oder Variable).
  • Wenn Sie es nur Zeichenfolge verwenden, müssen Sie es nicht zu einer Konstante machen. Beachten Sie jedoch, dass eine Konstante dokumentiert werden kann und in der Dokumentation (als Javadocs) auftaucht. Dies kann für nicht triviale Zeichenfolgenwerte wichtig sein.
+1

Ich denke, dass Sie an [this] Thema interessiert sein könnten (http://programmers.stackexchange.com/questions/142278/are-nullable-types-preparable-to-magic-numbers). – Torv

+0

Ich denke du zielst die Antwort von MainMa, oder? –

+0

Ja, hast du recht. Oh ich gründete [ein anderes interessantes Thema] (http://programmers.stackexchange.com/questions/145738/should-a-string-constant-be-defined-if-its-only-going-to-be-used-once) für dich. Diese Themen beantworten die Frage nicht, aber sie sind interessant =) – Torv

Antwort

1

Ich würde sicherlich Konstanten für die tatsächlichen Namen wie "DC" und "ObjectCategory", aber nicht für die Interpunktion machen. Der Sinn von diesem ist sicherzustellen, dass Sie keine Tippfehler und dergleichen haben, und dass Sie leicht alle Verweise für die Orte finden können, die diese magische Schnur verwenden. Die Interpunktion gehört nicht wirklich dazu.

Nur klar sein, ich nehme an, dass die magischen Saiten sind Dinge, die Sie zu tun haben, dass Sie durch eine Konstante definiert sie eine Reihe von so dass die Option nicht haben. Wie im Kommentar zu Ihrer Frage, das ist immer vorzuziehen, wenn das möglich ist. Manchmal müssen Sie jedoch eine Zeichenfolge verwenden, wenn Sie mit einem anderen System kommunizieren müssen, das dies erfordert.

+0

Klingt gut, Streicher wie ",". ".", "/", "//", "=" können fest codiert werden. Obwohl ich etwas wie DcString + EqualString vermeiden möchte. –

+0

Ja, sie haben keine globale Semantik.Das ist der Test. –