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

时间:2019-09-23 05:39:44

标签: design-patterns repository domain-driven-design

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

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

我了解了域实体的存储库模式抽象持久性。
因此,应用程序不需要知道实体的来源。 (来自服务器或本地数据库等)。

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

fun get(id: EntityId, update: Boolean)

但是我认为这揭示了实现细节。
存储库是否应该侦听UpdateEntityRequested之类的域事件?

1 个答案:

答案 0 :(得分:0)

我相信您回答了自己的问题。您必须以某种方式向客户端缓存指示应该更新。就是说,如果您通过域中的事件进行介绍,那么您仍会将域与持久性概念联系在一起。

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

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