4

真的很简单的问题,

我只是在寻找在架构上最有效的社区支持。

说,以下情况:TempData["MySetting"]?我应该在哪里存放"MySetting"?应该是

  1. 在单独的类中,以便访问TempData[Config.MySetting];
  2. 在 web.config 中,以便访问TempData[ConfigurationManager.AppSettings["MySetting"];
  3. 内联,将其保留为字符串TempData["MySetting"];
  4. 在数据库中的一些常量表中,这样

    var mySetting = (string)_db.GetConstant("MySetting");
    TempData[mySetting];
    

我不会处理选项 4,只是为了图片的完整性而带了它。那么你有什么建议,为什么

编辑 问题是关于 asp mvc 中的常量而不是 TempData 案例的一般性问题。

谢谢。

4

5 回答 5

4

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

简而言之:

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

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

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

于 2012-08-11T19:39:27.657 回答
4

我会去:

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

更多关于Const 与 Readonly

于 2012-08-11T20:03:15.897 回答
3

您可以尝试这种方法:

public static class Constants
{
       public static class Actions
       {
            public const string Administration = "Administration";
       }
}
于 2012-08-11T19:36:00.000 回答
3

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

如果它们在您使用的所有环境中都相同(包括您自己的开发箱、服务器和您可能想要部署的任何测试/登台机器),那么我会选择第一个选项:声明一个带有一些常量的类。

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

我会尽量避免保持原样,内联。

于 2012-08-11T19:25:50.973 回答
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";
}
于 2012-08-11T20:14:47.267 回答