2012-02-23 80 views
4

我有一些全局设置 例如下面的一些是存储应用程序全局设置的位置?

ShortLeaveAllowedInOneDay = 2 
LeaveAllowedInMonth = 3 

我有以下选项,这些全局设置

1店内存放在数据库中的表
2存放在Webconfig文件
3-Store in class filed
4-In XML文件

请您建议我哪一个更好的办法,为什么

我使用Asp.net MVC3 与SQLSERVER 2005

回答

9

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

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

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

缺点:

  • 比的选项的其余部分所需的多个基础设施(即表,DB访问等)。
  • 如果做得不正确,DB IO可能会成为问题。 (可以使用缓存策略来解决)



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

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

缺点:

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



3类商店为const场
优点:

  • 很简单的工作。
  • 可以使用静态类型。
  • 好的第一步是将设置重构为其他选项之一。

缺点:

  • 需要重建的设置进行更改。


4.在XML文件
优点:

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

缺点:

  • 它是XML。不是确实人类可读,像YAML格式改善。
  • 解析XML以进行读取和写入设置所需的实现。
+0

伟大的完整答案! – jorgebg 2012-09-27 10:12:35

0

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

为每个页面生命周期多次读取.xml文件对于性能而言将会非常糟糕。

我肯定会去web.config。

1

如果你需要他们通过你的软件的使用者,我不会做选项3.如果他们是你定义为一个程序员,不要指望他们改变当应用程序投入生产你可以设置进行配置去做。

我要说的是选择4和2基本上是相同的,在概念上,这是个人喜好从中选择。我个人喜欢定义一个custom configuration section,然后在它自己的.config文件中定义该部分(this显示了如何执行此操作),以便您没有用户必须导航的真正庞大的web.config。

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

1

添加在网络配置文件的AppSettings的会话,可以从代码直接访问,如:

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

编辑: 和Confir文件看起来像:

<appSettings> 

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

</appSettings> 
0

无方法本质上比其他方法更好。

最好的办法完全取决于你的需求是什么的东西,如安全性,可扩展性,灵活性,只读与可写的,配置的复杂性,等等。

0

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

0

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

  1. 值/改变者和有至关重要的开始/运行参数/初始化程序
  2. 值是变化冒犯,或他们是为每个用户不同。

您将初始变量存储在web.config中,并将所有其他数据存储在数据库中。如果你没有数据库,那么可用的就是XML文件。

相关问题