Asp.net 如何在网站中使用三层设计模式处理缓存

Asp.net 如何在网站中使用三层设计模式处理缓存,asp.net,caching,web,3-tier,Asp.net,Caching,Web,3 Tier,我正在开发一个asp.net小型网站,并考虑使用三层设计模式(Gui、BLL、DAL)。我的主要问题是,对于如何正确处理缓存,我感到有点不知所措 1.首先,缓存应该在哪里进行?它是在GUI网站中还是在BLL中? 2.其次,我觉得太乱了,有没有人能给我举一个简单的例子,说明如何在3tier的所有3个部分中以良好的方式进行缓存? 3.最后,你认为可以根据我的需要使用3tier吗 我个人非常喜欢三层结构,我只能推荐它。让我们看一个简单的示例,其中包含一些小缓存。我们现在关注的是结构 假设我们有以下代码

我正在开发一个asp.net小型网站,并考虑使用三层设计模式(Gui、BLL、DAL)。我的主要问题是,对于如何正确处理缓存,我感到有点不知所措

1.首先,缓存应该在哪里进行?它是在GUI网站中还是在BLL中? 2.其次,我觉得太乱了,有没有人能给我举一个简单的例子,说明如何在3tier的所有3个部分中以良好的方式进行缓存?
3.最后,你认为可以根据我的需要使用3tier吗

我个人非常喜欢三层结构,我只能推荐它。让我们看一个简单的示例,其中包含一些小缓存。我们现在关注的是结构

假设我们有以下代码优先结构

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; }
}
希望你能明白。我认为这是一个通用的结构,可以在各种情况下使用。如果有什么不清楚的,就问吧


更新:次要代码修复,关于缓存

我个人非常喜欢三层结构,我只能推荐它。让我们看一个简单的示例,其中包含一些小缓存。我们现在关注的是结构

假设我们有以下代码优先结构

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和DB first模型不太熟悉,但仍有兴趣了解更多。。我发现EF是一个必须了解技术的人,但没有看到好的web项目源代码示例,有什么建议吗。关于你的例子,我看不出缓存的问题,你如何准确地控制它?时间呢?缓存多长时间?另外,我认为这并不是典型的3tier,但如果我说错了,请纠正我,正如你所说的,是的,它比经典的3tier要复杂一点,它相当于4。(Ctrl+View,视图模型,BLL+DTO,DAL=EF)。我比较关注的是结构,你可以找到更多关于缓存的信息,关于EF,你可以从开始,除了文章,页面右侧还有一些不错的博客,比如嗯,我不确定它是否完全回答了我的问题。。第一个链接看起来不错,主要使用MVC,但第二个链接将缓存放在web项目中,而不是BLL中,这让我回到了我的问题。。我一直在问自己,不同的设计模式如何很好地解决缓存问题。我必须承认,我对EF和DB first模型不太熟悉,但仍有兴趣了解更多。。我发现EF是一个必须了解技术的人,但没有看到好的web项目源代码示例,有什么建议吗。关于你的例子,我看不出缓存的问题,你如何准确地控制它?时间呢?缓存多长时间?另外,我认为这并不是典型的3tier,但如果我说错了,请纠正我,正如你所说的,是的,它比经典的3tier要复杂一点,它相当于4。(Ctrl+View,视图模型,BLL+DTO,DAL=EF)。我比较关注的是结构,你可以找到更多关于缓存的信息,关于EF,你可以从开始,除了文章,页面右侧还有一些不错的博客,比如嗯,我不确定它是否完全回答了我的问题。。第一个链接看起来不错,主要使用MVC,但第二个链接将缓存放在web项目中,而不是BLL中,这让我回到了我的问题。。我一直在问自己,不同的设计模式如何很好地解决缓存问题
public class MainCache
{
    // Make it singleton
    // Create some init and a refresh method, watch for thread-safety
    public List<CategoryDto> Categories { get; set; } 
}
[HttpGet]
[OutputCache(Duration=10, VaryByParam="none")]
public ActionResult DisplayCategories()
{
    // Calling BLL, receiving Dto objects
    var model = MainCache.Instance.Categories; 
    return View(model);
}