gpt4 book ai didi

caching - 在哪一层实现缓存?

转载 作者:行者123 更新时间:2023-12-04 08:11:19 24 4
gpt4 key购买 nike

我正在使用 Service Stack 的框架开发 Rest API。所有层都是分开的,因此我们可以为业务逻辑层单元测试制作 DAL 模拟。

我正在使用控制反转配置缓存:
container.Register<ICacheClient>(new MemoryCacheClient());
哪里MemoryCacheClient是一个实现 ICacheClient 的简单类用几个方法。

这里的问题是:通过这种控制反转包含对缓存的调用的最佳层是什么?

  • 它可能在 BLL 中,但它不会给单元测试带来问题吗?
  • 可能是在 DAL,知道我将不得不失去 IOC?而且,在这种情况下,我将依赖网络服务器的缓存,这可能是错误的。
  • 它可能在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
  • http://forums.asp.net/t/1795015.aspx/1

  • 谢谢

    最佳答案

    您的缓存不需要位于任一层。通过将利用缓存的调用包装在装饰方法中并在 IoC 容器中配置缓存装饰器的使用,您可以将其保持在业务逻辑和数据访问逻辑之外。

    我还没有专门使用 ServiceStack 完成此操作,但该模式有据可查:

  • Introducing the CachedRepository Pattern (显式缓存装饰器)
  • Caching as a Cross-Cutting Concern using Castle Windsor (利用动态代理)
  • Loosely coupled .NET Cache Provider using Dependency Injection
  • Inversion of Control and Dependency Injection: Working with Windsor Container
  • 关于caching - 在哪一层实现缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15340173/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com