У меня есть следующий фрагмент кода:Должен ли я избегать магических струн, насколько это возможно?
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 для 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 =“, я должен думать в имена для этих переменных или разделить их на две части :(Тогда мой вопрос:. Должен ли я избежать магических строк как можно
ОБНОВЛЕНО
Некоторые выводы:.
- Есть способы избежать использования строк вообще, что может быть лучше. Для его достижения можно было использовать: статические классы, счетчики, числовые константы, контейнеры МОК и даже отражение.
- Постоянная строка поможет вам убедиться, что у вас нет опечаток (во всех ссылках на строку).
- Константные строки для пунктуации не имеют глобальной семантики. Было бы более читаемым использовать их, поскольку они являются ",". Использовать константу для этого случая можно, если эта константа может измениться в будущем, например изменение "," на "." (Имейте константу, которая может помочь вам в этом рефакторинге, хотя современные инструменты как resharper делают это без постоянной или переменной).
- Если вы используете его только в том случае, если вам не нужно вносить его в константу. Однако следует учитывать, что константа может быть документирована и показана в документации (как Javadocs). Это может быть важно для нетривиальных строковых значений.
Я думаю, вас может заинтересовать [this] (http://programmers.stackexchange.com/questions/142278/are-nullable-types-preferable-to-magic-numbers). – Torv
Я думаю, вы намереваетесь ответить от MainMa, верно? –
Да, ты прав. О, я основал [еще одну интересную тему] (http://programmers.stackexchange.com/questions/145738/should-a-string-constant-be-defined-if-its-only-going-to-be-used-once) для тебя. эти темы не отвечают на вопрос, но они интересны =) – Torv