我如何让最终用户控制App自己设置?

时间:2012-05-25 21:31:06

标签: asp.net-mvc asp.net-mvc-3 web-config global-asax

我有一个我在MVC 3中构建的系统,它目前提供一个年度提交周期,系统通过七个步骤进行处理,这些步骤与作为AppSettings存储在web.config中的日期相关联。但是,每年,我总是必须在之前的步骤之间来回滚动系统,以适应最终用户。我想让管理员无需联系开发人员即可控制系统状态。这样做的最佳方式是什么?

我计划构建一个具有适当验证的页面,让管理员设置日期。我已经考虑过如何存储这些日期的几个选项,但它们都不正确。我们的整个权限系统使用这些日期,页面上的各种文本根据我们当前所处的时间段打开和关闭。

到目前为止,我提出了两个选择:

选项1:创建数据库表 - 这是我的第一个想法。我在global.asax中的MvcApplication类上设置了属性,并从数据库中提取它们。使用延迟加载器,我可以在第一次需要时设置属性。但是,当他们在数据库中更改时,我没有办法强制系统“重置”并读取日期更改。如果我在Begin_Request()上执行此操作,我会不断打开连接并重置Web浏览器在服务器上打开的每个文件的属性,无论它是否是静态内容。

每次我需要其中一个日期时,我都可以直接从数据库中获取日期,但是我必须重做很多功能来减少重复的数据库调用。我想缓存每个请求的日期,只在需要时拉出它们,

选项2:允许通过应用程序编辑配置文件 - 我已查找如何split the web.config file,因此我可以拥有一个仅包含appSettings的单独文件。然后我可以update the new config file from a controller action。我认为这样可以很好地工作,并且不需要我重写任何现有的功能,但感觉我会在代码中引入一个糟糕的设计模式。

4 个答案:

答案 0 :(得分:3)

我投票支持数据库。为了提高性能,您可以将这些参数值缓存在应用程序内的静态类中,并提供一种方法,以便从同一个类中的DB重新读取它们。所以:

  1. 当用户发出请求时,请检查这些属性是否已被缓存。如果是 - 使用缓存值,如果不是 - 从DB
  2. 中读取它们
  3. 当管理员对这些参数进行更改时 - 将它们存储到数据库并强制执行静态缓存类以从数据库重新读取它们。

答案 1 :(得分:2)

我会将值存储在数据库中,并使用分布式缓存来保存Web场中的数据。 MS AppFabric缓存对我来说效果很好。您将需要实现标准缓存模式(检查缓存,如果从db加载null并插入缓存)。我可能只是创建一个静态的Load()方法来抽象出这个逻辑。当管理员更新数据库时,您可以更新缓存或只删除缓存密钥。

答案 2 :(得分:2)

我建议一种方法,不关心设置是否存储在配置文件中的数据库键/值对中。

由于您希望所有用户全局访问设置,您可以缓存设置,缓存实现应该是通用的和分布式的。如何创建这样的界面有很多在线资源。

由于您希望缓存与底层数据同步,您必须设置缓存依赖项(AppFabric不支持sql缓存依赖项,请参阅此thread,而NCache同时支持sql和file)

答案 3 :(得分:1)

Therr是要添加到性能中的其他考虑因素。即,如果你修改配置文件thr应用程序池是重新iniyializrd,而数据库解决方案不会导致应用程序重新初始化 ...所以你需要在更改之后重新初始化应用程序吗?...如果我无法避免对应用程序进行大量改进,那么配置文件解决方案就更好了