存储库模式-缓存

问题描述 投票:30回答:2

我不确定应该在我的存储库模式中在哪里实现缓存。

我应该在服务逻辑中还是在存储库中实现它?

GUI-> BusinessLogic(服务)-> DataAccess(存储库)

caching repository-pattern
2个回答
25
投票

我将在存储库/数据访问层中处理它。这样做的原因是,它不取决于从哪里获取数据的业务层,即存储库的工作。然后,存储库将根据数据访问逻辑的情况,决定从何处,从缓存(如果缓存不太旧)或实时数据源获取数据。

这是数据访问问题,而不是业务逻辑问题。


55
投票

最好不要将缓存逻辑直接放入您的存储库中,因为这违反了单一职责原则(SRP)和关注分离。 SRP本质上说,您的类应该只有一个更改的理由。如果将同一类中的数据访问和缓存策略方面的问题混为一谈,那么如果这两项需要更改,则需要联系该类。您还可能会发现您违反了DRY原理,因为在许多不同的存储库方法之间轻松分布缓存逻辑很容易,并且如果其中任何一个需要更改,您最终都不得不更改许多方法。

更好的方法是使用代理或策略模式将缓存逻辑应用于单独的类型,例如CachedRepository,然后在缓存为空时根据需要使用实际的以db为中心的存储库。我写了两篇文章,展示了如何使用.NET / C#来实现这一点,您可以在我的博客中找到:

[如果您喜欢视频,我还将在Pluralsight上的Proxy Design Pattern中描述此模式:

© www.soinside.com 2019 - 2024. All rights reserved.