Какие есть варианты для создания объектной модели, которая нуждается в кэшировании, используя Entity Framework и Postsharp? - PullRequest
0 голосов
/ 23 марта 2012

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

Решение построено с использованием 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, не более того.Мне действительно нужны новые материалы по этому вопросу.Как я могу сделать это вместо этого?Это лучший способ?

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

1 Ответ

0 голосов
/ 20 апреля 2012

Во-первых, я хочу сказать, что на самом деле есть некоторые (одно?) Решения, которые сначала используют код структуры сущностей в сочетании с кэшированием с использованием postsharp.Ideablades впервые выпустили код Devforce, который делает именно это.Такая структура на самом деле разрешает все, и мы можем использовать структуру сущностей так, как она должна использоваться, и в сочетании с кэшированием.

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

...