ZIO,入门,纯功能下载器



我有一个简单的程序,或多或少是一个下载器。它收集一个或多个可配置资源(通过自定义协议(,聚合并将它们写入到位。

这个程序看起来很简单,但代码仍然很复杂,并且混合了功能和过程代码(来自我的 Java 背景(。我想简化它并转向功能齐全的它。我正在阅读有关ZIO的信息,整个画面开始在我的脑海中建立。

但是,在阅读了入门和概述之后,我仍然有一些问题。

主流可能是这样的:

for {
config    <- Configuration.parse(args)
resources <- Downloaders.download(config)
_         <- Writer.write(resources)
} yield ()
  1. 我想包含静态值但也有一个http客户端的配置将被放入ZIOEnvironment

  2. 下载器可能是从未来构建的效果,可以使用 ZIObracket关闭连接。我想我可以用fold汇总结果.但是我不知道如何创建和执行许多下载器。
    编辑 a(由于Future是纯音符的,如何对异步运行的效果进行建模(我计划使用播放独立 WS 客户端(?
    编辑 b(我应该为每个目标创建一个下载器,请求将分配给它们。但是我应该如何在我的代码中实现它呢?我应该创建一个ZIO[Configuration, Throwable, List[Downloader]]然后通过collectAllPar执行所有这些吗?

  3. 我不知道如何在磁盘上编写聚合。

我想用这个项目在内部推广ZIO。所以我想使用最好的选择和最干净的方法。有人可以给我一些关于如何实现这些效果和构建我的代码的提示吗?编辑:我应该在 ZIO 组件上构建我的系统,还是构建一组函数并将它们包装到 ZIO 效果中?

多谢

你的问题不是很具体,这意味着不幸的是它不会吸引高质量的答案。

我仍然会尝试回答其中的一些问题。

  • Future不是纯粹的。如果可能,请避免使用它们。
  • 您的 donwloader 将是一个功能Request => ZIO[R, E, Response].要使它们并行运行,请使用ZIO.collectAllParZIO.zip。结果是一个ZIO[R, E, List[A]]ZIP[R, E, TupleX[...]],您可以将其存储在resources中以供理解。
  • 将数据写入文件可以在将 Scala 的new PrintWriter(new File("hello.txt"))包装成一个ZIO.bracket来完成。

有关使用ZIO进行程序设计的更多见解,我建议阅读De Gos本人的Beautiful,Simple,Testable Functional Effects for Scala。

当然,请参考ZIO网站上的文档。

最新更新