【发布时间】:2014-05-14 20:01:17
【问题描述】:
我的问题是:如何在我的域项目中实现缓存,它的工作方式与使用存储库模式的普通堆栈一样。
我的设置如下所示:
- ASP.NET MVC 网站
- Web API
- 域项目(使用 IoC,使用 Windsor)
例如,我的域项目有:
- IOrderRepository.cs
- OrderRepository.cs
- Order.cs
我的 ASP.NET MVC 网站调用 Web API 并取回一些 DTO 类。然后,我的 Web API 将这些对象映射到我的域项目中的业务对象,并使应用程序工作。
我的应用程序中没有任何地方实现缓存。
应该在哪里实现缓存?
我考虑在 OrderRepository 的方法中执行此操作,因此我的 Get、GetBySpecification 和 Update 方法必须调用由 OrderRepository 注入的一些通用缓存处理程序。
这显然给出了一些非常丑陋的代码,而且不是很通用。
如何维护缓存?
假设我们有一个像“OrderRepostory_123”这样的缓存键。当我调用 Update 方法时,我应该调用 cacheHandler.Delete("OrderRepository_123") 吗?因为那看起来也很丑
我自己的想法……
除了我描述的一些杂乱的方法之外,我真的看不出有什么好的方法。也许我可以做一些缓存层,但我想这意味着我的 WebAPI 不会再调用我的 OrderRepository,而是我的 CacheOrderRepository-something?
【问题讨论】:
-
您需要全局缓存还是仅用于会话?您的存储库是在内存中还是使用数据库?性能是您使用缓存的主要动机吗?
-
全局是我需要的缓存。存储库使用数据库。是的,表现是我目前唯一的动力。感谢您把这些事情说清楚!
-
如果你碰巧在使用 EF,你可以在上面设置缓存
-
@Steve 我愿意,但这只会缓存在我的域 -> 数据库连接上。这不会解决 Web API -> 域项目之间的任何问题 :) 但这是一个有效且好的观点
标签: c# asp.net asp.net-mvc asp.net-mvc-4 caching