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

Asp.net mvc ASP.MVC应用程序常量,最佳/最优雅的方法是什么?,asp.net-mvc,asp.net-mvc-3,architecture,constants,Asp.net Mvc,Asp.net Mvc 3,Architecture,Constants,简单的问题真的 我只是在寻找社区支持什么是最有效的架构 比如,下面的例子:TempData[“MySetting”]?我应该在哪里存储“MySetting”?应该是吗 在单独的类中,以便访问TempData[Config.MySetting] 在web.config中,以便访问是TempData[ConfigurationManager.AppSettings[“MySetting”]; 内联,将其保留为字符串TempData[“MySetting”]; 在DB中的某些常量表中,以便 var m

简单的问题真的

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

比如,下面的例子:
TempData[“MySetting”]
?我应该在哪里存储“MySetting”?应该是吗

  • 在单独的类中,以便访问
    TempData[Config.MySetting]
  • 在web.config中,以便访问是
    TempData[ConfigurationManager.AppSettings[“MySetting”];
  • 内联,将其保留为字符串
    TempData[“MySetting”];
  • 在DB中的某些常量表中,以便

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

    编辑 这个问题是关于asp mvc中的常量的,而不是关于TempData的


    谢谢。

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

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

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


    我会尽量避免让它保持原样,保持内联状态。

    您可以尝试以下方法:

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

    在您的特定情况下,您应该在
    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;}
        }
    }
    
    为简洁起见,我们这里不讨论耦合(紧密)和错误处理(无)。

    我同意:

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

    更多关于

    好吧,假设您的常量确实是常量,它们在运行时不会更改。在这种情况下,您使用
    常量
    字段修饰符,在某些情况下使用
    静态只读
    修饰符设置常量值

    public class MyConstants {
        public const string MyConstantNameValue = "Value";
        public const int MyConstantNameValue2 = 123;
    
        // prevent the class to be instantiated
        protected MyConstants() { }
    }
    
    正如您所见,您没有将
    MyConstants
    定义为静态类,因为如果您需要另一组特定命名空间的常量(例如,加上全局常量),您可以扩展这些常量


    你提到的有道理。除了1-4之外还有其他选项吗?如何创建自定义部分(不知道)-请更新答案好吗?感谢您花时间查看此URL,了解如何为Web创建自定义节的详细说明。配置:至于其他选项,这实际上取决于您要存储的内容以及您的特定应用程序。谢谢。我的问题比较笼统,而不是具体。如何处理不同的问题MVC应用程序中的ent常量?与任何其他应用程序中的方式相同。它们是常量-应该硬编码。所有其他内容都取决于使用情况,并且仅取决于使用情况。在这个问题上没有通用方法。同样,您可以将其定义为部分并扩展而不进行子分类。谢谢。如果这些部分在同一个塞姆布雷,是的,你可以。
    public class MyConstantsPlusSpecificNamespaceConstants : MyConstants {
        public const string MySpecificConstantName = "Value2";
    }