gpt4 book ai didi

c# - 在 Web API 使用的域项目中实现服务缓存

转载 作者:太空宇宙 更新时间:2023-11-03 21:32:05 24 4
gpt4 key购买 nike

我的问题是:我如何在我的域项目中实现缓存,它的工作方式就像一个使用存储库模式的普通堆栈。

我的设置如下所示:

  • ASP.NET MVC 网站
  • 网络应用程序接口(interface)
  • 领域项目(使用 IoC,使用 Windsor)

例如我的领域项目有:

  • IOrderRepository.cs
  • OrderRepository.cs
  • Order.cs

我的 ASP.NET MVC 网站调用 Web API 并取回一些 DTO 类。然后,我的 Web API 将这些对象映射到我的域项目中的业务对象,并使应用程序运行。

我的应用程序中没有任何地方实现缓存。

应该在哪里实现缓存?

我考虑过在 OrderRepository 的方法中执行它,所以我的 GetGetBySpecificationUpdate 方法必须调用一些通用缓存由 OrderRepository 注入(inject)的处理程序。

这显然给出了一些非常难看的代码,而且不是很通用。

如何维护缓存?

假设我们有一个像“OrderRepostory_123”这样的缓存键。当我调用 Update 方法时,我应该调用 cacheHandler.Delete("OrderRepository_123") 吗?因为那看起来也很丑

我自己的想法...

除了我所描述的一些困惑的方法之外,我真的看不到一个合适的方法来做到这一点。也许我可以做一些缓存层,但我想这意味着我的 WebAPI 不会再调用我的 OrderRepository,而是我的 CacheOrderRepository 之类的东西?

最佳答案

就个人而言,我不喜欢直接在存储库类中包含缓存。一个类应该有一个改变的原因,而添加缓存通常会增加第二个原因。鉴于您的出发点,您至少有两个可能的合理选择:

  1. 创建一个新类,将缓存添加到存储库并公开相同的接口(interface)
  2. 创建一个使用一个或多个存储库并添加缓存的新服务接口(interface)

根据我的经验,#2 通常更有值(value),因为您希望作为单个单元缓存的对象可能会跨存储库。当然,这取决于您如何确定存储库的范围。很大程度上取决于您的存储库是基于聚合根(ala DDD)、表还是其他。

关于c# - 在 Web API 使用的域项目中实现服务缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23664030/

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