2013-08-18 3 views
1

Я разрабатываю небольшой веб-сайт asp.net и думал об использовании трехуровневого шаблона проектирования (Gui, BLL, DAL). Моя основная проблема заключается в том, что я чувствую себя немного потерянным, как я должен обращаться с правом кэширования.Как обрабатывать кеширование с трехуровневым шаблоном дизайна на веб-сайте

1. Прежде всего, где должно выполняться кэширование? Это на веб-сайте GUI или в BLL? 2.Второй, мне кажется слишком беспорядочным, любой шанс, который любой мог бы предоставить мне простой пример того, как кеширование осуществляется в хорошем смысле со всеми 3 частями 3-го уровня? 3.Last, do u find okay, чтобы использовать 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-first, а не проблему.

Давайте есть некоторые объекты DTO (см MSDN или wiki), как:

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

Таким образом, уровень управления может получить доступ к кэшу, как это: Update: Теперь результат действия сам кэшируется, детали here. Это безопасное решение, рамки делают все.

[HttpGet] 
[OutputCache(Duration=10, VaryByParam="none")] 
public ActionResult DisplayCategories() 
{ 
    // Calling BLL, receiving Dto objects 
    var model = MainCache.Instance.Categories; 
    return View(model); 
} 

Надеюсь, вы его получите. Я думаю, что это общая структура, которая может использоваться в различных ситуациях. Если что-то непонятно, просто спросите.

Update: Minor код исправления, и о кэшировании

+0

Я должен признать, Im не так хорошо знакомы с EF и DB первой модели, но все-таки интересно узнать больше .. Я считаю, EF, как должен знать технологию, но не вижу хорошие исходные примеры веб-проектов, релевантных, любые предложения? , Что касается примера ура, я не вижу кеширование, как вы его точно контролируете? Как насчет времени? Как долго он кэшируется? Кроме того, я думаю, что это не совсем классический способ 3tier, но исправьте меня, если я ошибаюсь – Popokoko

+0

Как вы упомянули, да, это немного сложнее, чем классический 3tier, это скорее 4. (Ctrl + View, Модели Views , BLL + DTO, DAL = EF). И я скорее сосредоточился на структуре, вы найдете больше о кешировании [здесь] (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/ –

 Смежные вопросы

  • Нет связанных вопросов^_^