我正在创建一个门户网站,其中许多网站将运行相同的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);
}
}
}
答案 0 :(得分:2)
使用静态属性可能不好的唯一原因是打破了视图和模型之间关注点的分离。该模型应该是唯一一个关于如何检索数据的模型 - 即使是来自同一应用程序域中的对象。
虽然通过ViewData
将这些数据呈现给视图似乎有些过分,但这确实是最佳做法,因为它保留了关注点的分离。您越积极地保留这种分离,您的应用程序将越好地处理重构和错误修复。