【问题标题】: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】:

    我会更实际一些。两种基本情况。

    1. 值/参数会改变,并且对于启动/运行/初始化程序至关重要
    2. 值会因更改而受到影响,或者每个用户的值都不同。

    您将初始变量存储在 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 应用程序和一些其他客户端应用程序并且都需要访问数据库,那么将配置存储在那里不错的选择。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-02-10
                  • 2011-02-09
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-06-19
                  • 1970-01-01
                  • 2011-01-08
                  相关资源
                  最近更新 更多