林開發asp.net網站小,想着使用三層設計模式(GUI,BLL,DAL)。我的主要問題是,我應該如何處理緩存權利,我覺得有點失落。如何處理與3層的設計模式緩存,或在網站
1.首先,應該在哪裏緩存做些什麼呢?它在GUI網站還是BLL中?第二,對我來說感覺太亂了,任何人都可以給我提供一個簡單的例子,說明3tier的所有3個部分如何以良好的方式完成緩存? 3.最後,你是否覺得我的需要使用3tier?
林開發asp.net網站小,想着使用三層設計模式(GUI,BLL,DAL)。我的主要問題是,我應該如何處理緩存權利,我覺得有點失落。如何處理與3層的設計模式緩存,或在網站
1.首先,應該在哪裏緩存做些什麼呢?它在GUI網站還是BLL中?第二,對我來說感覺太亂了,任何人都可以給我提供一個簡單的例子,說明3tier的所有3個部分如何以良好的方式完成緩存? 3.最後,你是否覺得我的需要使用3tier?
我個人很喜歡的3層結構,我只能推薦它。我們來看一個簡單的示例,其中包含一些小緩存。我們現在專注於結構。
讓我們假設我們有下面的代碼先形成結構。
public class BlogEntry
{
public int Id { get; set; }
public string Title { get; set; }
public string Text { get; set; }
public int CategoryId { get; set; }
public virtual Category Category { get; set; }
}
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public virtual List<Blog> Blogs { get; set; }
}
public BlogContext : DbContext
{
public DbSet<Category> Category { get; set; }
public DbSet<BlogEntry> Entry { get; set; }
}
請注意,EF將通過命名約定(如「Id」)在數據庫中創建主鍵和外鍵。您也可以使用Db優先模型,而不是問題。
public class CategoryDto
{
// To use in LINQ .Selector()
public Expression<Func<Category, CategoryDto>> Selector = efCategory => new CategoryDto
{
Id = efCategory.Id,
Name = efCategory.Name,
}
public int Id { get; set; }
public int Name { get; set; }
}
當然類別不是經常改變,所以我們可以建立某種形式的緩存他們。這種情況下的緩存顯然是在BLL級別,使用Dto對象。 更新:只有當您有一些不太可能改變但非常頻繁訪問的數據時,這纔是好事。否則,不要打擾它。
public class MainCache
{
// Make it singleton
// Create some init and a refresh method, watch for thread-safety
public List<CategoryDto> Categories { get; set; }
}
所以控制器級可以訪問緩存是這樣的:更新:現在本身緩存作用的結果,查看詳細信息here。這是一個安全的解決方案,框架完成了一切。
[HttpGet]
[OutputCache(Duration=10, VaryByParam="none")]
public ActionResult DisplayCategories()
{
// Calling BLL, receiving Dto objects
var model = MainCache.Instance.Categories;
return View(model);
}
希望,你明白了。我認爲這是一個可以在各種情況下使用的通用結構。如果有些事情不清楚,就問。
更新:次要代碼修復,以及有關緩存
我必須承認,我不是那麼熟悉EF和DB第一種模式,但仍然有興趣知道更多。我覺得作爲EF必須知道的高科技,但沒看見有關web項目的很好的源代碼例子,有什麼建議嗎? 。關於你的例子,我沒有看到緩存的問題,你如何控制它?什麼時間?多久它被緩存?另外,我覺得這是不完全3TIER的經典方法,但如果我錯了 – Popokoko
至於你提到了,是的,這是一個有點比經典3TIER更復雜的指正,這是相當4.(按Ctrl +查看,瀏覽的模式,BLL + DTO,DAL = EF)。我更關注結構,你可以找到關於緩存的更多信息[here](http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/improving-performance-with-output -caching-CS)和[這裏](http://stackoverflow.com/questions/343899/how-to-cache-data-in-a-mvc-application) –
關於EF可以從[MSDN]啓動(http://msdn.microsoft.com/en-us/data/ee712907),除了文章之外,頁面右側還有一些漂亮的博客,如http://thedatafarm.com/blog/ –