我有产品库。我想使用 redis 作为缓存。我创建了缓存库。
当我想获得产品时。首先我去缓存 repo 如果不存在我查询主数据库。如果产品存在于那里。我写入缓存并返回。
选项 1) 我通过 DI 在产品存储库中获取缓存存储库并在其中使用。
选项 2)我在带有产品存储库的命令处理程序中的应用程序层中获取缓存存储库,我分别使用它们
最佳答案
在我看来,您是由技术需求(即 Redis 的使用)而非业务需求(即为什么需要缓存?性能问题、延迟?)驱动的。
但是,总结一下 SO 中另一个线程的精彩帖子:Which layer should I implement caching of lookup data from database in a DDD application? ,您有以下选择:
- 管理应用层的缓存,直接在应用服务中。这样,您可以完全控制是否要为此类查询/命令使用缓存
- 隐藏存储库中的缓存。但是在这里,您存储库的每个客户端都将使用缓存,而这可能是您想要控制的。
无论哪种方式,最常见的方法之一是使用模式代理,其中方法调用将首先被代理拦截,如果已经从缓存中发送数据,代理的作用是发送数据有数据。否则将调用委托(delegate)给原始对象。
关于domain-driven-design - DDD聚合仓库和缓存仓库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63531444/