Хорошо, чтобы Представления или ViewModels возвращались Репозиторием против Уровня Сервиса? Что следует кэшировать? - PullRequest
1 голос
/ 15 ноября 2011

Я использую Azure AppFabric для кэширования с новым репозиторием. Мой репозиторий выглядит примерно так:

public interface IMyRepository
{
  public IEnumerable<K> Select(IQueryable<T> someQuery) 
  public IEnumerable<T> SelectAllStudents()  // should I replace T with Children in my repository?
}

Мое намерение состоит в том, чтобы выставлять и кэшировать запросы OData от клиента, следовательно, IQueryable. У меня также есть вторичная необходимость часто возвращать данные, которые выглядят так:

public class Children
{
  public string Name {get;set;}

  public int CountOfToys {get;set;}

  public List<Toys> {get;set;}
}

Однако моя база данных - это 1..many Детей для игрушек.

Текущее приложение ASP.NET использует свойства Навигации EF непосредственно на странице aspx, чтобы заполнить ViewModel выше, однако я не знаю наиболее эффективного маршрута, переносящего эту функциональность в хранилище.

Из-за кэширования AppFabric мои ограничения для результатов IEnumerable следующие:

  • Возвращаемый объект не должен иметь тип значения
  • Возвращаемый объект должен быть сериализуемым
  1. Как реализовать IMyRepository для поддержки кэширования запросов OData?
  2. Можно ли репозиторию создавать не только классы моделей, но и совокупный класс "children"? Какой термин подходит для этого?
  3. Предполагая, что вышеприведенный шаг в порядке, я должен использовать свойства навигации для заполнения этого дополнительного класса?

1 Ответ

0 голосов
/ 26 января 2012

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

...