【问题标题】:Best way to define constant in asp.net在 asp.net 中定义常量的最佳方法
【发布时间】:2015-12-26 22:09:33
【问题描述】:

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

Type1-

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

有没有更好的办法?使用 property 好还是使用 public 变量 好?

【问题讨论】:

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


    【解决方案1】:

    首先,空合并运算符使这很多更简单。

    接下来,假设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"] 表达式还是使用缓存字段不太可能产生太大影响 - 但我建议使用属性而不是公共字段,因为这意味着您可以稍后更改实现(例如更改其惰性),而不必担心向后兼容性。

    【讨论】:

    • 感谢乔恩,您的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2018-02-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多