缓存是在哪一层实现的?

8
我正在使用Service Stack框架开发Rest API。所有层都是分离的,因此我们可以为业务逻辑层单元测试创建DAL模拟。
我正在使用控制反转配置缓存: container.Register<ICacheClient>(new MemoryCacheClient()); 其中MemoryCacheClient是一个简单的类,实现了一些方法,并实现了ICacheClient接口。
问题是:通过这种控制反转,在哪个层中包含对缓存的调用最好?
- 可以在BLL中,但它不会给单元测试带来问题吗? - 它可以在DAL中,知道我必须失去IOC?在这种情况下,我将依赖于Web服务器的缓存,这可能是错误的。 - 它可以在Web界面中,知道我可以在这里有一些逻辑,甚至失去一些功能吗? - 它可以在Web界面和BLL之间创建一个新层吗?
我已经搜索了很多并阅读了一些文章,但没有运气。

谢谢

1个回答

6
您的缓存不需要在任何一层中。您可以通过将利用缓存的调用包装在一个装饰方法中,并在IoC容器中配置缓存装饰器的使用,将其保持外部于业务逻辑和数据访问逻辑之外。
我尚未使用ServiceStack进行此操作,但该模式已有很好的文档记录:
- 介绍CachedRepository模式(显式缓存装饰器) - 使用Castle Windsor作为横切关注点的缓存(利用动态代理) - 使用依赖注入的松耦合.NET缓存提供程序 - 控制反转和依赖注入:使用Windsor容器

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接