3

我正在创建一个门户,许多站点将在其中运行相同的 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);
    }
}

}

4

1 回答 1

2

使用静态属性可能不好的唯一原因是破坏了视图和模型之间的关注点分离。模型应该是唯一关心如何检索数据的模型——即使是来自同一应用程序域中的对象。

虽然通过它向视图呈现这些数据似乎有点矫枉过正,ViewData但它确实是最佳实践,因为它保留了关注点的分离。您越积极地保留这种分离,您的应用程序就越能更好地处理重构和错误修复。

于 2009-01-22T18:10:52.613 回答