ASP.MVC应用程序常量,什么是最好/最优雅的方法?

时间:2012-08-11 18:58:41

标签: asp.net-mvc asp.net-mvc-3 architecture constants

真的很简单,

我只是在寻找社区支持,这在结构上最有效。

说,以下案例:TempData["MySetting"]?我应该在哪里存储"MySetting"?应该是

  1. 在单独的类中,以便访问权限为TempData[Config.MySetting];
  2. 在web.config中
  3. ,以便访问TempData[ConfigurationManager.AppSettings["MySetting"];
  4. 内联,将其保留为字符串TempData["MySetting"];
  5. 在DB中的某些常量表中,以便

    var mySetting = (string)_db.GetConstant("MySetting");
    TempData[mySetting];
    
  6. 我不会处理选项4,只是为了图片的完整性。 那么你有什么建议和为什么

    修改 关于asp mvc中的常量而不是TempData情况,问题相当普遍。

    感谢。

5 个答案:

答案 0 :(得分:4)

在您的特定情况下,您应该在TempData周围创建一个包装器,它会将您的数据公开为属性。对TempData的所有访问都应隐藏在该包装内。在这种情况下,"MySetting"的所有用法将限制为最多 2。如果只有一种用法,则无需执行任何操作。如果有两个 - 您将"MySetting"定义为private const字段。

简而言之:

public static class TempDataWrapper
{
    private const string _mySettingName = "MySetting";

    public int MySetting
    {
        get { return (int) TempData[_mySettingName];}
        set { TempData[_mySettingName] = value;}
    }
}

为了简洁起见,我们不处理耦合(紧密)和错误处理(没有)。

答案 1 :(得分:4)

我会选择:

public static class Config
{
    public static readonly string MyValue = "SomeValue";
}

有关Const vs Readonly

的更多信息

答案 2 :(得分:3)

您的设置是否更改?根据您部署的环境?如果是,那么你肯定希望将它们存储在Web.config文件中(如果它不像几个键/值对那么简单,你甚至可以创建一个自定义部分。)

如果它们在您使用的所有环境中都相同(包括您自己的开发盒,服务器以及您可能要部署的任何测试/暂存机),那么我会选择第一个选项:声明一个带有几个常数。

至于将它们存储在数据库中,它实际上取决于什么样的设置。如果您希望它们是您网站的每个用户,那么您最终可能会将它们存储在您的数据库中。或者如果您希望能够更改它们(在网站运行时编辑web.config文件不是最好的主意)。

我试着远离原样,内联。

答案 3 :(得分:3)

您可以尝试这种方法:

public static class Constants
{
       public static class Actions
       {
            public const string Administration = "Administration";
       }
}

答案 4 :(得分:1)

好吧,假设你的常量是真正的常量,它们不会在运行时改变。在这种情况下,您可以使用const字段修饰符,在某些情况下使用static readonly修饰符来设置常量值。

public class MyConstants {
    public const string MyConstantNameValue = "Value";
    public const int MyConstantNameValue2 = 123;

    // prevent the class to be instantiated
    protected MyConstants() { }
}

如您所见,您没有将MyConstants定义为静态类,因为如果您需要另一组特定命名空间的常量(例如全局常量),则可以扩展常量。

public class MyConstantsPlusSpecificNamespaceConstants : MyConstants {
    public const string MySpecificConstantName = "Value2";
}