【问题标题】:Where to store application global settings?在哪里存储应用程序全局设置?
【发布时间】:2012-03-13 14:27:09
【问题描述】:
我有一些全局设置
例如下面的一些是
ShortLeaveAllowedInOneDay = 2
LeaveAllowedInMonth = 3
我有以下选项来存储这些全局设置
1-存储在数据库表中
2-存储在 Webconfig 文件中
3-在类中存储为 const 字段
4-在 XML 文件中
您能否建议我哪种方法更好?为什么
我正在使用 Asp.net MVC3
使用 sqlserver 2005
【问题讨论】:
标签:
c#
asp.net
c#-4.0
architecture
coding-style
【解决方案1】:
我会更实际一些。两种基本情况。
- 值/参数会改变,并且对于启动/运行/初始化程序至关重要
- 值会因更改而受到影响,或者每个用户的值都不同。
您将初始变量存储在 web.config 中,并将所有其他变量存储在数据库中。如果您没有数据库,那么任何可用的,例如 XML 文件。
【解决方案2】:
您可以将变量存储在 Web.config 文件中。
【解决方案3】:
在 web.config 文件中存储全局变量是一项非常常见的任务。
当数据库可能过度使用并且您不需要单独的外部文件时,将值存储在 web.config 文件中非常有用。
在每个页面生命周期中多次读取 .xml 文件对性能非常不利。
我肯定会选择 web.config。
【解决方案4】:
这取决于您的要求,这些选项中的每一个都有其优点和缺点。它试图列出一些:
1.存储在数据库表中
优点:
- 相对容易阅读的设置。
- 可以写入/更新设置。
- 对数据库的访问速度很快。
- 可立即更新数据库值。
- 数据库可以在集群环境中的多个实例之间共享。
缺点:
- 比其他选项(即表、数据库访问等)需要更多的基础架构。
- 如果操作不当,DB IO 可能会成为问题。 (可以通过缓存策略解决)
2.存储在 web.config 文件中
优点:
缺点:
- 对
web.config 的更改可能会导致应用程序池重新启动。
- 设置通常不加密。
- 在集群环境中,文件必须与其他实例保持同步。
- 设置设置时,通常必须处理字符串数据类型和可能的无效用户输入。
3.在类中存储为 const 字段
优点:
- 使用起来非常简单。
- 可以使用静态类型。
- 将设置重构为其他选项之一的良好第一步。
缺点:
4.在 XML 文件中
优点:
- 便于存储复杂的设置,例如层次结构。
- 自定义 XML 配置设置可以嵌入到 web.config 中。 (热门选项请参阅
log4net 为例)
- 无需重新启动应用程序池即可更新配置文件。
- XSD 可以强制文件中设置的有效性(结构和数据类型)
缺点:
- 它是 XML。 真的不是人类可读的,像 YAML 这样的格式改进了这一点。
- 解析 XML 以进行读写设置所需的实现。
【解决方案5】:
没有一种方法天生就比其他方法更好。
最佳方法完全取决于您对安全性、可扩展性、灵活性、只读与可写、配置复杂性等方面的要求。
【解决方案6】:
在 web 配置文件中添加一个 AppSettings 会话,可以直接从代码中访问它:
System.Configuration.ConfigurationManager.AppSettings["ShortLeaveAllowedInOneDay "];
编辑:
并且确认文件看起来像:
<appSettings>
<add key="ShortLeaveAllowedInOneDay " value="2" />
</appSettings>
【解决方案7】:
如果您需要由您的软件用户配置它们,我不会执行选项 3。如果它们是您定义为程序员的设置,并且不希望在您的应用程序投入生产时更改它们,您可以这样做那个。
我会说选项 4 和 2 在概念上基本相同,选择哪个是个人喜好。就我个人而言,我喜欢定义一个custom configuration section,然后在它自己的 .config 文件中定义该部分(this 显示如何做到这一点),这样您就没有用户必须使用的非常庞大的 web.config导航。
如果我有多个组件都需要访问相同的配置,我会选择选项 1。如果您正在构建的只是一个 Web 应用程序,我觉得没有必要这样做,但是如果,例如,您有一个 Web 应用程序和一些其他客户端应用程序并且都需要访问数据库,那么将配置存储在那里不错的选择。