存储应用程序全局设置的位置?

时间:2012-02-23 07:19:43

标签: c# asp.net c#-4.0 architecture coding-style

我有一些全局设置 例如,下面的一些是

ShortLeaveAllowedInOneDay = 2
LeaveAllowedInMonth = 3

我有以下选项来存储这些全局设置

1 - 存储在数据库表中 2存储在Webconfig文件中 作为const提交的3级商店 4-In XML文件

你能否告诉我哪一个更好的方法以及为什么

我使用的是Asp.net MVC3 使用sqlserver 2005

7 个答案:

答案 0 :(得分:9)

这取决于您的要求,这些选项中的每一个都有自己的优点和缺点。它试图列出一些:

<强> 1。存储在数据库表中
优点:

  • 相对容易阅读的设置。
  • 可以编写/更新设置。
  • 访问数据库的速度很快。
  • 可立即更新数据库值。
  • 可以在群集环境中的多个实例之间共享数据库。

缺点:

  • 需要比其他选项更多的基础架构(即表,数据库访问等)。
  • 如果操作不正确,DB IO可能会成为问题。 (可以通过缓存策略解决)



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

  • 简单地添加和访问设置。

缺点:

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



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

  • 使用非常简单。
  • 可以使用静态类型。
  • 将设置重构为其他选项之一的第一步。

缺点:

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


<强> 4。在XML文件中
优点:

  • 方便存储复杂设置,例如层次结构。
  • 自定义XML配置设置可以嵌入到web.config中。 (热门选项见log4net为例)
  • 可以在不重新启动应用程序池的情况下更新配置文件。
  • XSD可以强制执行文件中的设置(结构和数据类型)的有效性

缺点:

  • 是XML。不是真正人类可读,像YAML这样的格式改进了。
  • 解析XML以进行读写设置所需的实现。

答案 1 :(得分:1)

如果您需要由软件用户配置它们,我不会选择3.如果它们是您定义为程序员的设置,并且不希望在应用程序投入生产时更改它们,您可以执行这一点。

我会说选项4和2在概念上基本相同,并且个人喜好可供选择。我个人喜欢定义一个custom configuration section,然后只在它自己的.config文件中定义了那个部分(this显示了如何做到这一点),这样你就没有一个真正庞大的web.config用户必须导航。

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

答案 2 :(得分:1)

在Web配置文件中添加AppSettings会话,可以直接从代码中访问:

System.Configuration.ConfigurationManager.AppSettings["ShortLeaveAllowedInOneDay "];

编辑: 并且Confir文件看起来像:

<appSettings>

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

</appSettings>

答案 3 :(得分:0)

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

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

我肯定会去web.config。

答案 4 :(得分:0)

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

最佳方法完全取决于您对安全性,可伸缩性,灵活性,只读与可写,配置复杂性等内容的要求。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

我会更实际。两个基本案例。

  1. 更改一个且对启动/运行/初始化程序至关重要的值/参数
  2. 值是更改冒犯,或者每个用户都有所不同。
  3. 将初始变量存储在web.config上,将所有其他变量存储在数据库中。如果你没有数据库,那么可用的东西,比如XML文件。