【问题标题】:How to implement the repository pattern with updatable caches如何使用可更新缓存实现存储库模式
【发布时间】:2019-09-23 05:39:44
【问题描述】:

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

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

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

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

fun get(id: EntityId, update: Boolean)

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复。我发现我在应用架构时犯了一个错误。对于我的应用程序,域逻辑存在于服务器中。所以存储库只是一个缓存处理程序。我决定从服务器获取一个实体并将其保存到存储库中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多