在代码而不是web.config中存储值

时间:2012-04-13 08:37:10

标签: .net web-config

我最近开始研究相当大的应用程序,我注意到很多设置都存储在静态类/属性中,而不是存储在web.config中:

public static class FormSettings
{
    public const string HttpPostContentType = "application/x-www-form-urlencoded";
    public const string HttpPostMethodValue = "POST";
}

我可以看到这样做的唯一原因是由于大量设置会使它们难以存放在单个文件中。

除了在不重新编译代码的情况下无法更改这些设置的事实,这种方法还有其他缺点吗?

编辑:

好的,上面的例子不是最好的:

public static class ThirdPartyApiSettings
{
    public const string EmployeeXmlNodeName = "Employee";
    public const string FirstNameXmlNodeName = "FirstName";
}

2 个答案:

答案 0 :(得分:2)

存储设置实际上取决于应用程序和方案。 通过您的方法,最大的问题是一切都是硬编码的。 如上所述,您必须考虑:

  • “变量”的使用频率
  • 改变的可能性
  • 应用程序的哪个部分需要访问此变量
  • 您要存储的信息(设置)

存储设置的方法很少:

  • Web.config(appsettings) - 不建议使用此方法存储大量设置列表(尽管它只是名称值的集合)。你也不能在那里真正存储复杂的类型(嗯......你可以,但我从未见过有人序列化对象并保存到web.config中)。这种方式适用于存储字符串值。使用这种方法的最大问题(至少对我而言)是每次在web.config中添加/更改内容时重新编译应用程序。
  • 资源文件 - 这非常适合内容 - 特别是如果您想要本地化它。您还可以在那里存储设置。问题 - 它已编译,您无法轻松更新。
  • 自定义类 - 适用于存储成本和枚举(不会经常更改),但如果您想存储可能会更改的内容,则不是最佳方法。
  • 自定义XML文件 - 我非常喜欢这种方法,因为它允许您在不重新编译应用程序的情况下进行更改 - 问题在于您必须编写自己的解析器并且非常小心 - 很容易错过格式化xml文件:)< / LI>
  • 数据库 - 可本地化,远程,可由不同应用程序访问,易于更改

您可能还想考虑是否需要版本控制,审核等等。

希望它有所帮助。

答案 1 :(得分:0)

您需要编译更多内容,您拥有更多依赖项,并且无法在不重建整个应用程序的情况下对其进行更改。

此外,它不是一个编程部分,应该分开。你也可以将你的控制器,视图,动作和dao放在一个文件中(在webapp中),它可以工作,但你不能这样做:)