如何使用可更新缓存实现存储库模式
How to implement the repository pattern with updatable caches
我正在努力在项目中应用存储库模式。
要求并不复杂:
1. 当客户端向服务器请求一些实体列表时,客户端将它们保存到本地数据库中进行缓存。
2. 如果有缓存,客户端应该使用它们(在过期时间内)。
3. 当客户端收到刷新数据等用户操作或收到一些通知时,客户端应该从远程服务器更新本地数据,无论它们是否过期。
我学习了领域实体的存储库模式抽象持久化。
所以应用程序不需要知道实体来自哪里。
(来自服务器或本地数据库等。)
但是我如何更新存储库隐藏的本地数据?
通过在存储库方法参数中添加标志?
fun get(id: EntityId, update: Boolean)
但我认为这揭示了实现细节。
存储库应该监听像 UpdateEntityRequested
这样的域事件吗?
我相信你已经回答了你自己的问题。您必须以某种方式向客户端缓存指示它应该更新。也就是说,如果您通过域中的事件引入它,那么您仍然将域绑定到持久性概念中。
好消息是您可以简单地说,如果聚合有一个事件,那么您应该更新回服务器。它不一定是特定事件。流中的任何事件都足以确定发生了更改。
如果此答案不充分,请提供更多详细信息。
我正在努力在项目中应用存储库模式。
要求并不复杂:
1. 当客户端向服务器请求一些实体列表时,客户端将它们保存到本地数据库中进行缓存。
2. 如果有缓存,客户端应该使用它们(在过期时间内)。
3. 当客户端收到刷新数据等用户操作或收到一些通知时,客户端应该从远程服务器更新本地数据,无论它们是否过期。
我学习了领域实体的存储库模式抽象持久化。
所以应用程序不需要知道实体来自哪里。
(来自服务器或本地数据库等。)
但是我如何更新存储库隐藏的本地数据?
通过在存储库方法参数中添加标志?
fun get(id: EntityId, update: Boolean)
但我认为这揭示了实现细节。
存储库应该监听像 UpdateEntityRequested
这样的域事件吗?
我相信你已经回答了你自己的问题。您必须以某种方式向客户端缓存指示它应该更新。也就是说,如果您通过域中的事件引入它,那么您仍然将域绑定到持久性概念中。
好消息是您可以简单地说,如果聚合有一个事件,那么您应该更新回服务器。它不一定是特定事件。流中的任何事件都足以确定发生了更改。
如果此答案不充分,请提供更多详细信息。