应用程序全局设置存储在哪里?

5

我有一些全局设置,例如以下几个:

ShortLeaveAllowedInOneDay = 2
LeaveAllowedInMonth = 3

我有以下选项来存储这些全局设置:
1-存储在数据库表中 2-存储在Webconfig文件中 3-存储在以const字段形式的类中 4-存储在XML文件中
请问您能否建议哪种方法更好,为什么?
我正在使用Asp.net MVC3和sqlserver 2005。
7个回答

10

这取决于您的需求,每个选项都有其优缺点。以下是一些罗列:

1. 存储在数据库表中
优点:

  • 相对易于读取设置。
  • 可以编写/更新设置。
  • 访问数据库快速。
  • 立即可用于数据库值的更新。
  • 在集群环境下,DB 可以共享多个实例。

缺点:

  • 比其他选项需要更多的基础设施(例如:表、数据库访问等)。
  • 如果处理不当,DB IO 可能会成为问题。(可以通过缓存策略解决)



2. 存储在 web.config 文件中
优点:

  • 简单添加和访问设置。

缺点:

  • 更改 web.config 可能导致应用程序池重启。
  • 通常不加密设置。
  • 在集群环境中,文件必须与其他实例保持同步。
  • 通常必须处理字符串数据类型和可能的无效用户输入。



3. 存储在类中作为 const 字段
优点:

  • 非常简单易用。
  • 可与静态类型一起使用。
  • 是将设置重构为其他选项的良好第一步。

缺点:

  • 需要重新构建才能更改设置。


4. 在 XML 文件中
优点:

  • 方便存储诸如层次结构之类的复杂设置。
  • 可以在web.config文件中嵌入自定义的XML配置设置(流行选项,如log4net)
  • 更新配置文件时无需重新启动应用程序池。
  • XSD可以强制执行文件中的设置的有效性(包括结构和数据类型)
  • 缺点:

    • 它是XML。不太容易阅读,像YAML这样的格式有所改善。
    • 需要实现解析XML以进行读写设置。

1
在web.config文件中添加一个AppSettings会话,可以直接从代码中访问,就像这样:
System.Configuration.ConfigurationManager.AppSettings["ShortLeaveAllowedInOneDay "];

编辑: 确认文件的外观将类似于:

<appSettings>

<add key="ShortLeaveAllowedInOneDay " value="2" />

</appSettings>

1

如果您需要让软件用户配置它们,我不会选择选项3。如果这些设置是您作为程序员定义的,并且在应用程序生产过程中不希望更改它们,那么您可以这样做。

我认为选项4和2在概念上基本相同,选择哪个取决于个人喜好。个人而言,我喜欢定义一个自定义配置部分,然后只在其自己的.config文件中定义该部分(此处显示如何执行),以便用户无需浏览非常庞大的web.config。

如果我有多个组件都需要访问相同的配置,则会选择选项1。如果您只构建单个Web应用程序,则我认为没有必要这样做,但是例如,如果您有一个Web应用程序和一些其他客户端应用程序,两者都需要访问数据库,则将配置存储在那里是一个不错的选择。


0

在web.config文件中存储全局变量是一项非常常见的任务。 当数据库可能过于繁琐,而且您不需要单独的外部文件时,在web.config文件中存储值非常有用。

为每个页面生命周期多次读取.xml文件对性能来说非常糟糕。

我肯定会选择web.config。


0

没有一种方法本质上比其他方法更好。

最好的方法完全取决于您对安全性、可扩展性、灵活性、只读与可写性、配置复杂性等方面的要求。


0

你可以将变量存储在 Web.config 文件中。


0

我会更加实际。有两种基本情况。

  1. 值/参数只改变一次,对于启动/运行/初始化程序至关重要
  2. 值经常更改,或者对于每个用户都不同。

您可以将初始变量存储在web.config中,将所有其他变量存储在数据库中。如果没有数据库,则可以使用可用的任何内容,例如XML文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接