0

我正在使用对性能有很高要求的互联网应用程序,这意味着良好的缓存功能对我们的成功至关重要。

该解决方案使用 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;
    }
}

我不喜欢在业务对象中有依赖关系,但它的论点是从缓存中延迟加载......最多。此解决方案还意味着缓存仅对生产者... at 进行一次GetProducer。通常我什至不会考虑在那里有依赖关系。对象应该是 POCO,仅此而已。我真的需要一些新的投入。我该怎么做呢?这是最好的方法吗?

我们还需要解决相反的问题,即,从缓存的生产者中,我们应该能够检索其所有文章。

4

1 回答 1

0

首先,我想说的是,实际上有一些(一个?)解决方案首先使用实体​​框架代码并结合使用 postsharp 进行缓存。Ideablades 首先发布了实际上就是这样做的 Devforce 代码。这种框架实际上解决了这一切,我们可以使用它应该使用的实体框架,并结合缓存。

但这并没有成为这种情况下的解决方案。我们追求完全的关注点分离,这意味着业务对象仅关注点将仅包含数据。操作类负责填充业务对象。

于 2012-04-19T22:29:36.187 回答