ОК, чтобы представления или модели представления возвращались уровнем репозитория и обслуживания? Что нужно кэшировать?

Я использую 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. Можно ли репозиторию создавать не только классы моделей, но и «дочерний» агрегатный класс? Какой правильный термин для этого?
  3. Предполагая, что описанный выше шаг выполнен правильно, должен ли я использовать свойства навигации для заполнения этого дополнительного класса?

person halfbit    schedule 15.11.2011    source источник
comment
Этот ответ заставляет меня думать, что я должен оставить репозиторий IQueryable, а затем кэшировать уровень службы. Мысли?   -  person halfbit    schedule 15.11.2011


Ответы (1)


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

person Shaun Xu    schedule 26.01.2012