DDD聚合存储库和缓存存储库



我有产品存储库。我想使用redis作为缓存。我创建了缓存回购。

当我想得到产品。首先我去缓存回购,如果不存在我查询主数据库。如果那里有产品。我写缓存并返回。

选项1(我通过DI在产品存储库中获得缓存存储库并在其中使用。

选项2(我在带有产品存储库的命令处理程序中的应用层中获得缓存存储库,并且我分别使用这两个

在我看来,您是受技术需求(即Redis的使用(驱动的,而不是业务需求(即为什么需要缓存?性能问题,延迟?(。

但是,总结一下SO中另一个线程的一篇精彩文章:在DDD应用程序中,我应该在哪个层实现数据库中查找数据的缓存?,您有以下选项:

  • 直接在应用程序服务中管理应用程序层中的缓存。这样,您就可以完全控制是否要将缓存用于此类查询/命令
  • 隐藏存储库中的缓存。但在这里,存储库的每个客户端都将使用缓存,这可能是您想要控制的

无论哪种方式,最常见的方法之一都是使用模式proxy,其中方法调用将首先被代理截获,如果缓存中已经有数据,代理的角色是从缓存中发送数据。否则,将调用委托给原始对象。

最新更新