![](/img/trans.png)
[英]Is it bad practice to use static fields to cache large objects in ASP.NET?
[英]In ASP.Net MVC, is using static methods to look up cached objects on views bad practice?
我正在创建一个门户网站,其中许多网站将运行相同的MVC应用程序。 我有一个存储在HttpRuntime.Cache中的站点列表。 通过静态方法访问缓存是错误的吗? 我应该在视图数据上传递这个吗?
例如,视图上的这个错误:
SiteHelper的代码是:
public class SiteHelper {
private static object @lock = new object();
private const string siteKey = "FelixSites";
public static Site CurrentSite {
get {
var context = HttpContext.Current.Wrap();
var sites = context.Cache[siteKey] as Site[];
if (sites == null) {
lock (@lock) {
if (sites == null) {
sites = SiteService.GetSites();
context.Cache[siteKey] = sites;
}
}
}
return sites.Single(s => s.Domain == context.Request.UrlReferrer.AbsoluteUri);
}
}
}
使用静态属性可能不好的唯一原因是打破了视图和模型之间关注点的分离。 该模型应该是唯一关注数据检索方式的模型 - 即使是来自同一应用程序域中的对象。
虽然通过ViewData
将这些数据呈现给视图似乎有点过分,但它确实是最佳实践,因为它保留了关注点的分离。 您越积极地保留这种分离,您的应用程序将越好地处理重构和错误修复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.