2

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

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

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

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

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

选项 2:允许通过应用程序编辑配置文件– 我已经查看了如何拆分 web.config 文件,以便我可以拥有一个仅包含 appSettings 的单独文件。然后我可以从控制器操作更新新的配置文件。我认为这会很好地工作,并且不需要我重写任何现有功能,但感觉就像我会在代码中引入一个糟糕的设计模式。

4

4 回答 4

3

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

  1. 当用户发出请求时,检查这些属性是否已被缓存。如果它们是 - 使用缓存值,如果不是 - 从数据库中读取它们
  2. 当管理员对这些参数进行更改时 - 将它们存储到数据库并强制您的静态缓存类从数据库中重新读取它们。
于 2012-05-25T21:38:41.517 回答
2

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

于 2012-05-30T17:16:59.900 回答
2

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

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

由于您希望缓存与基础数据同步,因此您必须设置缓存依赖项(AppFabric 不支持 sql 缓存依赖项,请参阅此线程,而NCache支持 sql 和文件)。

于 2012-05-31T07:29:44.647 回答
1

还有其他要添加到性能的考虑因素。即如果您修改配置文件thr应用程序池是re iniyializrd,而数据库解决方案不会导致应用程序重新初始化...那么您是否需要在更改后重新初始化应用程序?...如果我没有办法避免初始化不会对应用程序进行剧烈的更改,可能是配置文件解决方案更好

于 2012-05-31T17:37:20.287 回答