在asp.net中定义常量的最佳方法

时间:2015-09-29 12:15:05

标签: asp.net c#-4.0 design-patterns architecture coding-style

从架构的角度来看,从编码常设角度来看,在asp.net中声明常量/配置驱动变量,以下2方法中哪一个更好。

类型1 -

class Constants
{
    public static string ConnectionString
    {
        get
        {
            //Get the connection string value from web.config
            if (ConfigurationManager.AppSettings["ConnectionString"] != null)
            {
                return ConfigurationManager.AppSettings["ConnectionString"];
            }
            else
            {
                return string.Empty;
            }
        }
    }
}

类型2 -

class Constants
{
    public static string ConnectionString = ConfigurationManager.AppSettings["ConnectionString"] != null ?
                                                ConfigurationManager.AppSettings["ConnectionString"] : string.Empty;
}

还有更好的方法吗?使用属性或使用公共变量更好吗?

1 个答案:

答案 0 :(得分:2)

首先,null-coalescing运算符使 lot 更简单。

接下来,假设ConfigurationManager.AppSetting["ConnectionString"]不随时间变化,您可以使用:

// TODO: Rename this...
class Constants 
{
    private static readonly string connectionString;
    public static string ConnectionString { get { return connectionString; } }

    static Constants()
    {
        ConnectionString = ConfigurationManager.AppSettings["ConnectionString"] ?? "";
    }
}

或者只是使用每次获取它的属性 - 一个更简单的版本 第一个代码:

// TODO: Rename this...
class Constants 
{
    public static string ConnectionString
    {
         get { return ConfigurationManager.AppSettings["ConnectionString"] ?? ""; }
    }
}

使用C#6,该属性更加流畅:

// TODO: Rename this...
class Constants 
{
    public static string ConnectionString =>
        ConfigurationManager.AppSettings["ConnectionString"] ?? "";
}

选择是评估ConfigurationManager.AppSettings["ConnectionString"]表达式还是使用缓存字段不太可能产生太大影响 - 但我 建议使用属性而不是公共字段,如这意味着您可以稍后更改实现(例如,更改其懒惰),而无需担心向后兼容性。