2013-08-18 21 views
1

林開發asp.net網站小,想着使用三層設計模式(GUI,BLL,DAL)。我的主要問題是,我應該如何處理緩存權利,我覺得有點失落。如何處理與3層的設計模式緩存,或在網站

1.首先,應該在哪裏緩存做些什麼呢?它在GUI網站還是BLL中?第二,對我來說感覺太亂了,任何人都可以給我提供一個簡單的例子,說明3tier的所有3個部分如何以良好的方式完成緩存? 3.最後,你是否覺得我的需要使用3tier?

回答

1

我個人很喜歡的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優先模型,而不是問題。

讓我們有一些DTO對象(見MSDNwiki),如:

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

希望,你明白了。我認爲這是一個可以在各種情況下使用的通用結構。如果有些事情不清楚,就問。

更新:次要代碼修復,以及有關緩存

+0

我必須承認,我不是那麼熟悉EF和DB第一種模式,但仍然有興趣知道更多。我覺得作爲EF必須知道的高科技,但沒看見有關web項目的很好的源代碼例子,有什麼建議嗎? 。關於你的例子,我沒有看到緩存的問題,你如何控制它?什麼時間?多久它被緩存?另外,我覺得這是不完全3TIER的經典方法,但如果我錯了 – Popokoko

+0

至於你提到了,是的,這是一個有點比經典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) –

+0

關於EF可以從[MSDN]啓動(http://msdn.microsoft.com/en-us/data/ee712907),除了文章之外,頁面右側還有一些漂亮的博客,如http://thedatafarm.com/blog/ –