如何使用可更新缓存实现存储库模式

How to implement the repository pattern with updatable caches

我正在努力在项目中应用存储库模式。

要求并不复杂:
1. 当客户端向服务器请求一些实体列表时,客户端将它们保存到本地数据库中进行缓存。 2. 如果有缓存,客户端应该使用它们(在过期时间内)。 3. 当客户端收到刷新数据等用户操作或收到一些通知时,客户端应该从远程服务器更新本地数据,无论它们是否过期。

我学习了领域实体的存储库模式抽象持久化。
所以应用程序不需要知道实体来自哪里。 (来自服务器或本地数据库等。)

但是我如何更新存储库隐藏的本地数据?
通过在存储库方法参数中添加标志?

fun get(id: EntityId, update: Boolean)

但我认为这揭示了实现细节。
存储库应该监听像 UpdateEntityRequested 这样的域事件吗?

我相信你已经回答了你自己的问题。您必须以某种方式向客户端缓存指示它应该更新。也就是说,如果您通过域中的事件引入它,那么您仍然将域绑定到持久性概念中。

好消息是您可以简单地说,如果聚合有一个事件,那么您应该更新回服务器。它不一定是特定事件。流中的任何事件都足以确定发生了更改。

如果此答案不充分,请提供更多详细信息。