我有一个静态字符串变量,我需要根据HTTP协议进行更改。
更改静态字符串变量>
是不好的做法static string QuoteWebServiceUrl = CommonFunctions.ReadAppSetting("QuoteWebServiceUrl");
if(url == "https")
{
QuoteWebServiceUrl = CommonFunctions.ReadAppSetting("QuoteWebServiceUrlSecure");
}
else
{
QuoteWebServiceUrl = CommonFunctions.ReadAppSetting("QuoteWebServiceUrl");
}
由于
答案 0 :(得分:10)
没有。当然,您可以更改静态字符串变量的值。为什么你认为这是一个糟糕的实践?
答案 1 :(得分:1)
我的意思是,修改静态变量不是问题。这是一个变量。它可以变化。那么为什么变化(即修改它)是一种不好的做法呢?是的,在某些情况下,如果你这样做,你不应该或不必小心,但总的来说,事实并非如此。
这里最大的问题是在应用程序的内容深处阅读应用程序设置。它会破坏可维护性和可测试性。这是一种非常糟糕的做法,我鼓励你立即停止。
答案 2 :(得分:1)
在这种情况下,它看起来只是一次性设置,但您必须注意多线程环境中的竞争条件,包括ASP.NET。
答案 3 :(得分:0)
从编程方面来说,从POV语言可以改变它。
否则取决于变量的逻辑,它在整个业务逻辑中的含义。
答案 4 :(得分:0)
不,这在一般中并不是一个坏习惯。在特定的情况下,这是一个可怕的主意。
答案 5 :(得分:0)
单独更改静态变量并不是一件坏事。
但是,我看不到有关此类的多个实例修改相同静态的预防措施。这是一个潜在的并发问题。
此外,你应该在静力学中设置两个设置,并根据你的情况选择一个合适的设置,但在初始化后保留静态。
答案 6 :(得分:0)
对于多线程,编辑静态变量不好,不能扩展,并且可能在某些随机情况下不适当地运行。 但是...
在某些业务逻辑中,一次只能处理一个线程,或者限制为一个线程。如果是这种情况,完全可以使用。
在这种情况下,最好有一个选择,我们有时可能没有别的选择,而是进行更改(其中一种情况是将WEBAPI与Async任务一起使用,最重要的是一次仅一个线程,并且用户希望为每个线程动态更新状态) api点击)
答案 7 :(得分:-1)
您可以使用静态属性而不是静态变量。
private static string QuoteWebServiceUrl
{
get
{
if(url == "https")
{
return CommonFunctions.ReadAppSetting("QuoteWebServiceUrlSecure");
}
else
{
return CommonFunctions.ReadAppSetting("QuoteWebServiceUrl");
}
}
}