Я работаю с интернет-приложением, которое предъявляет высокие требования к производительности, что означает, что хорошая функциональность кэширования имеет решающее значение для нашего успеха.
Решение построено с использованием Entity Framework Code First для доступа к базе данных и Postsharpдля кеширования.На данный момент модель выглядит примерно так:
public class Article
{
private readonly IProducerOperator _producerOperator;
public Article(IProducerOperator operator)
{ _producerOperator = operator; }
public int Id { get; set; }
...
public int ProducerId { get; set; }
public Producer Producer {
get { return _producerOperator.GetProducer(ProducerId); }
}
}
Классы операций выглядят следующим образом.
public class ArticleOperations : IArticleOperations
{
private readonly IDataContext _context;
public ArticleOperations(IDataContext context)
{ _context = context; }
[Cache]
public Article GetArticle(int id)
{
var article = _context.Article.Find(id);
return article;
}
}
public class ProducerOperations : IProducerOperations
{
private readonly IDataContext _context;
public ProducerOperations(IDataContext context)
{ _context = context; }
[Cache]
public Producer GetProducer(int id)
{
var producer = _context.Producer.Find(id);
return producer;
}
}
Мне не нравятся зависимости в бизнес-объектах, но аргумент дляэто ленивая загрузка из кеша ... для большинства.Это решение также означает, что кэширование выполняется только один раз для производителя ... на GetProducer
.Обычно я бы даже не подумал о наличии там зависимостей.Объекты должны быть POCO, не более того.Мне действительно нужны новые материалы по этому вопросу.Как я могу сделать это вместо этого?Это лучший способ?
Нам также нужно разрешить обратное, то есть от производителя, который кэшируется, мы сможем получить все его статьи.