2009-01-22 14 views
3

我正在創建一個門戶網站,許多網站將運行相同的MVC應用程序。我有存儲在HttpRuntime.Cache中的網站列表。通過靜態方法訪問緩存是否錯誤?我是否應該通過查看數據?在ASP.Net MVC中,是使用靜態方法在視圖上查找緩存對象的不良做法?

例如,這是錯的觀點:

凡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); 
    } 
} 

}

回答

2

可能不好用靜態的唯一原因財產是打破你的觀點和你的模型之間的關注分離。該模型應該是唯一一個關心如何檢索數據的人 - 即使是來自同一應用程序域中的對象。

儘管通過ViewData將這些數據展示給視圖可能看起來過於矯枉過正,但它確實是最佳實踐,因爲它保留了關注點的分離。您越積極保留這種分離,您的應用程序就能更好地處理重構和錯誤修復。

相關問題