Caching 存储库模式-缓存
我不确定在我的存储库模式中应该在哪里实现缓存 我应该在服务逻辑中还是在存储库中实现它 GUI->BusinessLogic(服务)->DataAccess(存储库)Caching 存储库模式-缓存,caching,repository-pattern,Caching,Repository Pattern,我不确定在我的存储库模式中应该在哪里实现缓存 我应该在服务逻辑中还是在存储库中实现它 GUI->BusinessLogic(服务)->DataAccess(存储库) 我会在存储库/数据访问层处理它。原因是,从何处获取数据并不取决于业务层,而这是存储库的工作。然后,存储库将根据数据访问逻辑的情况决定从何处获取数据、缓存(如果不是太旧)或从实时数据源获取数据 与其说是业务逻辑问题,还不如说是数据访问问题 最好不要将缓存逻辑直接放入存储库,因为这违反了单一责任原则(SRP)和关注点分离。SRP本质上说
我会在存储库/数据访问层处理它。原因是,从何处获取数据并不取决于业务层,而这是存储库的工作。然后,存储库将根据数据访问逻辑的情况决定从何处获取数据、缓存(如果不是太旧)或从实时数据源获取数据
与其说是业务逻辑问题,还不如说是数据访问问题 最好不要将缓存逻辑直接放入存储库,因为这违反了单一责任原则(SRP)和关注点分离。SRP本质上说,您的类应该只有一个更改的理由。如果您将数据访问和缓存策略的关注点合并到同一个类中,那么如果其中任何一个需要更改,您将需要接触该类。您还可能会发现您违反了DRY原则,因为缓存逻辑很容易分散在许多不同的存储库方法中,如果其中任何一种方法需要更改,您最终不得不更改许多方法 更好的方法是使用代理或策略模式以单独的类型应用缓存逻辑,例如CachedRepository,然后在缓存为空时根据需要使用实际的以数据库为中心的存储库。我已经写了两篇文章,演示了如何使用.NET/C#实现此功能,您可以在我的博客上找到这篇文章,如下所示: