![](/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.