Это плохая практика, чтобы изменить значение статической переменной? - PullRequest
7 голосов
/ 15 февраля 2011

У меня есть статическая строковая переменная, которую мне нужно изменить, возможно, в зависимости от протокола HTTP.

Это плохая практика, чтобы изменить статическую строковую переменную>

static string QuoteWebServiceUrl = CommonFunctions.ReadAppSetting("QuoteWebServiceUrl");

if(url == "https")
{
  QuoteWebServiceUrl = CommonFunctions.ReadAppSetting("QuoteWebServiceUrlSecure");
}
else
{
  QuoteWebServiceUrl = CommonFunctions.ReadAppSetting("QuoteWebServiceUrl");
}

Спасибо

Ответы [ 7 ]

10 голосов
/ 15 февраля 2011

Нет.Конечно, вы можете изменить значение статической строковой переменной.Почему вы думаете, что это плохая практика?

1 голос
/ 15 февраля 2011

В этом случае это выглядит как разовая установка, но вы должны помнить о состоянии гонки в многопоточной среде, включая ASP.NET.

1 голос
/ 15 февраля 2011

Я имею в виду, изменение статической переменной не является проблемой.Это переменная.Это может варьироваться.Итак, почему изменение (то есть изменение его) было бы плохой практикой?Да, есть ситуации, когда вы не должны или должны быть осторожны, если это так, но в целом это не так.

Большой проблемой здесь является чтение настроек приложения в глубине души вашего приложения.Это убивает ремонтопригодность и тестируемость.Это ужасно плохая практика, и я призываю вас немедленно остановиться.

0 голосов
/ 14 января 2015

Вы можете использовать статическое свойство вместо статической переменной.


private static string QuoteWebServiceUrl 
{ 
    get 
    { 
        if(url == "https") 
        {   
            return CommonFunctions.ReadAppSetting("QuoteWebServiceUrlSecure"); 
        } 
        else 
        {   
            return CommonFunctions.ReadAppSetting("QuoteWebServiceUrl"); 
        } 
    } 
}

Статическое свойство

0 голосов
/ 15 февраля 2011

Само по себе изменение статической переменной не является плохой вещью.

Однако я не вижу мер предосторожности, касающихся нескольких экземпляров этого класса, изменяющих одну и ту же статику.Это потенциальная проблема параллелизма.

Кроме того, вам, вероятно, следует установить две настройки в статике и выбрать ту, которая подходит в зависимости от вашего состояния, но оставить статику в покое после инициализации.

0 голосов
/ 15 февраля 2011

Нет, это не плохая практика в общем . В вашем конкретном случае это ужасная идея.

0 голосов
/ 15 февраля 2011

Программно говоря, от языка POV все в порядке, чтобы изменить его.

В противном случае зависит от логики переменной, значения, которое она имеет в общей бизнес-логике.

...