这是我之前的问题的后续。
正如我从Haxl和Stitch了解到的,他们使用 monad 进行数据访问。monad 实际上是一棵数据访问命令树。子节点是节点所依赖的命令。兄弟姐妹同时执行。
业务逻辑创建 monad,然后一个单独的函数对其进行fetch
解释。
现在,问题是:假设我同时执行一些数据访问操作。我可以使用应用函子(不是单子),它只是一个命令列表(不是树)。
是否有意义 ?如果列表包含重复的命令怎么办?
我认为通过构造Fetch
值,可以避免重复相同查询的可能性,即使在同一轮查询中(当它们是你所说的“兄弟姐妹”时)。如果你看一下论文,图 4 解释了 的实现dataFetch
,它是值的构造Fetch
函数。它考虑了三种可能性:
在最后一种情况下,您会注意到返回的值有一个空序列BlockedRequest
s,因为在这种情况下,其他一些Blocked
fetch 有它。这样,当ap
使用此值调用函数时,它不会连接相同的重复请求。
顺便说一句,我一直在尝试在 Scala 中实现Haxl。