我正在使用Service Stack的框架开发Rest API。所有图层都是分开的,因此我们可以对业务逻辑层单元测试进行DAL模拟。
我正在使用控制反转来配置缓存:
container.Register<ICacheClient>(new MemoryCacheClient());
MemoryCacheClient
是一个使用几种方法实现ICacheClient
的简单类。
这就是问题:通过这种控制反转包含对缓存的调用的最佳层是什么?
它可能在BLL中,但不会给单元测试带来问题吗?
可能在DAL,知道我必须失去IOC吗?而且,在这种情况下,我将依赖于webserver的缓存,这可能是错误的。
它可能在Web界面中,知道我可以在这里有一些逻辑甚至丢失一些功能吗?
可以在Web界面和BLL之间创建一个新图层吗?
我经常搜索并阅读一些文章,但没有幸运:
Help with debate on Separation of concerns (Data Access vs Business Logic)
http://www.velocityreviews.com/forums/t639532-3-tier-design-and-cache-for-asp-net-3-5-a.html
感谢的
答案 0 :(得分:6)
您的缓存不需要位于任何一层。您可以通过在调用方法中包含可以利用缓存的调用并在IoC容器中配置缓存装饰器的使用来将其保留在业务逻辑和数据访问逻辑外部。
我没有专门使用ServiceStack这样做,但模式已有详细记录: