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

AD の解析を行っているため、"DC="、"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;
     }

「DC」と「DC=」があるかもしれませんが、この変数の名前を考えるか、これらを2つに分割する必要があります:(。それから私の質問: 魔法の文字列をできるだけ避けるべきですか?

更新

いくつかの結論:

  • 文字列をまったく使用しないようにする方法はいくつかありますが、その方がよい場合があります。それを達成するには、静的クラス、列挙子、数値定数、IOC コンテナー、さらにはリフレクションを使用できます。
  • 定数文字列は、タイプミスがないことを確認するのに役立ちます (文字列へのすべての参照で)。
  • 句読点の定数文字列には、グローバル セマンティックはありません。これらを","のまま使用すると読みやすくなります。「、」「。」に変更するなど、その定数が将来変更される可能性がある場合は、この場合に定数を使用することを検討してください。(リシャーパーとしての最新のツールは定数や変数を必要とせずにこれを行いますが、定数を使用するとそのリファクタリングに役立つ場合があります)。
  • 文字列を一度だけ使用する場合は、定数にする必要はありません。ただし、定数を文書化して、ドキュメントに (Javadocs として) 表示できることを考慮してください。これは、重要な文字列値にとって重要な場合があります。
4

1 に答える 1

1

「DC」や「objectCategory」などの実際の名前には確かに定数を作成しますが、句読点には定数を作成しません。これのポイントは、タイプミスなどがないことを確認し、その魔法の文字列を使用する場所のすべての参照を簡単に見つけることができるようにすることです. 句読点は実際にはその一部ではありません。

明確にするために、魔法の文字列は対処しなければならないものであり、それらを定数で定義された数値にするオプションはないと仮定しています。あなたの質問へのコメントのように、それが可能であれば常に望ましいです。ただし、文字列を必要とする他のシステムとのインターフェースが必要な場合は、文字列を使用する必要がある場合があります。

于 2012-05-19T04:31:22.643 に答える