缓存对象而不是副作用[Play Framework]

时间:2015-07-30 09:44:14

标签: java playframework functional-programming playframework-2.0 side-effects

这个问题参考了Play 2.2 Java。

我有一个从Web服务检索的项目列表。该列表将经常被要求,所以我在本地缓存列表。

我已经设置了一个客户端代码可以调用以透明地获取列表的方法。该方法将首先检查缓存,如果列表不在本地,则回退到Web服务。

我遇到的问题是从Web服务重新生成缓存列表。我无法使用Cache.getOrElse方法,因为它需要列表的实例,Play.libs.WS会返回Promise<WS.Response>,我会映射到Promise<List>

我目前的策略如下:

  1. 查询列表的缓存,并返回包含在Promise
  2. 中的结果
  3. 展平Promise,返回包装列表(如果存在),或调用Web服务适配器,并返回返回的Promise<List>
  4. 现在,在我从步骤2中的Web服务适配器返回Promise之前,我在promise上注册了一个回调,以便在兑换时将列表添加到缓存中。

    我想知道的是:有没有办法可以将Web服务的列表添加到缓存中,而不会影响流程的副作用?

    我尝试了另一种策略,我在其中映射了返回的Promise,缓存了它,并返回了列表,但这似乎是一种更明显的副作用。如果可以,我想避免这样做。

0 个答案:

没有答案