有选择地缓存存储库对象或数据结果



我一直在考虑使用.NET 4.0缓存功能或通过像这样的第三方抽象接口在存储库级别实现缓存,我刚刚遇到了一个问题,我必须支持两个用例。

我的应用程序可能分为多个区域,例如管理区域和用户前端(网站前端)。我不希望在Admin区域进行任何缓存,Admins应该始终向他们显示最新刷新的数据。

现在,我是否必须重构我所有的存储库方法来接受一个参数,无论是否返回缓存的结果?还有其他选择吗?

您可以在控制器级别进行缓存,而不是在存储库中。这样,在管理区域控制器中,您将始终查询存储库以获取新数据,而在其他控制器中,则会缓存结果。如果您绝对需要在存储库层缓存对象,则需要一个额外的参数来指示是否从Admin区域进行调用。或者,您也可以使用DI框架,如NInject,它允许您将参数从HttpContext传递给每个请求生存期分配的依赖项。因此,您可以将area RouteData参数注入到存储库的构造函数中。

由于您使用的是ASP.NET,因此可以应用不同级别的缓存。如果我们已经有了轮子,我不会再重新发明它了。

我们有:

  • ASP.NET服务器缓存
  • 服务器上的ASP.NET输出缓存(在操作中使用[OutputCache]
  • 客户端上的ASP.NET输出缓存(在操作中使用[OutputCache]

实体框架或其他ORM也可以进行缓存。所以我想说,使用已经存在的东西,直到你确定它不能满足你的需求。


更新

如果必须在存储库中进行,我建议使用依赖项注入功能来注入正确的存储库(有缓存或没有缓存的存储库)

最新更新