5

这是我之前的问题的后续。

正如我从HaxlStitch了解到的,他们使用 monad 进行数据访问。monad 实际上是一棵数据访问命令树。子节点是节点所依赖的命令。兄弟姐妹同时执行。

业务逻辑创建 monad,然后一个单独的函数对其进行fetch解释。

现在,问题是:假设我同时执行一些数据访问操作。我可以使用应用函子(不是单子),它只是一个命令列表(不是树)。

是否有意义 ?如果列表包含重复的命令怎么办?

4

1 回答 1

2

我认为通过构造Fetch值,可以避免重复相同查询的可能性,即使在同一轮查询中(当它们是你所说的“兄弟姐妹”时)。如果你看一下论文,图 4 解释了 的实现dataFetch,它是值的构造Fetch函数。它考虑了三种可能性:

  1. 以前从未提出过请求
  2. 该请求已在之前提出并且已完成
  3. 之前已经提出过请求,但尚未完成

在最后一种情况下,您会注意到返回的值有一个空序列BlockedRequests,因为在这种情况下,其他一些Blockedfetch 有它。这样,当ap使用此值调用函数时,它不会连接相同的重复请求。

顺便说一句,我一直在尝试在 Scala 中实现Haxl

于 2015-05-01T20:49:16.627 回答