我在数据库中有两个值,它们定义了我的应用程序中太多事物的行为,并且至少在不久的将来不会改变。创建静态变量并将值加载到我的应用程序中是最好的决定Global.asax
吗?
4 回答
一般规则是,当您知道您的值/数据将过期或在特定时间段后需要更改时使用缓存,否则使用静态变量。我发现了一个类似的讨论HttpRuntime.Cache[] vs Application[]
另请查看ASP.NET Caching: Techniques and Best Practices
是的,您可以将它们缓存在静态变量中。但是如果它们现在不需要更改并且保持不变,为什么不将它们定义为常量或在 web.config 中?
我建议创建一个具有属性的静态类,这些常量设置将在您的应用程序启动时从数据库中设置其值。
每当我有存储在数据库中的“系统”设置时,我都会做同样的事情。我将它们作为属性保存在静态类中,并一直访问它们。我还对不经常更改但经常使用以减少数据库流量的小表(即项目组)的内容使用相同的技术。我创建只读集合并访问它们,而不是一直访问数据库。
但任何事情都是最适合您的问题,只要它干净且易于维护。
我个人对我的 MVC 站点使用依赖注入(我更喜欢ninject)。这允许您将变量定义为 .InSingletonScope,这意味着您不需要在应用程序中使用令人讨厌的静态变量。然后我在第一次请求时从数据库中加载值并将其存储在一个局部变量中,并且它整洁。
即我会用这个:
public class CachedFooProperty : IFooProperty
{
public CachedFooProperty(IRepository<Foo> fooRepo)
{
Foo = fooRepo.GetFoo();
}
public Foo Foo{get;private set;}
}
然后像这样绑定它:
Bind<IFooProperty>().To<CachedFooProperty>().InSingletonScope();
这种做事方式的好处是它非常容易通过简单地更改绑定来打开和关闭缓存。您也可以非常轻松地将其更改为基于 web.config 的配置方法,而无需更改使用该设置的每个位置。