我有一个简单的程序,它或多或少是一个下载器。它收集一个或多个可配置资源(通过自定义协议),将它们聚合并写入到位。
这个程序看起来很简单,但代码仍然很复杂,并且混合了功能代码和过程代码(来自我的 Java 背景)。我想简化它并转向一个功能齐全的。我正在阅读有关ZIO的信息,整个画面开始在我脑海中形成。
但是,在阅读了入门和概述之后,我仍然有一些问题。
主要流程可能如下:
for {
config <- Configuration.parse(args)
resources <- Downloaders.download(config)
_ <- Writer.write(resources)
} yield ()
我猜想包含静态值的配置,但也有一个 http 客户端将被放入 ZIO
Environment
。下载器可能是未来构建的效果,并且可能使用 ZIO
bracket
来关闭连接。我想我可以用fold
. 但我不知道如何创建和执行许多下载器。
已编辑 a)既然Future
是纯音符,我如何建模一个异步运行的效果(我打算使用 Play Standalone WS Client)?
编辑 b)我应该为每个目标创建一个下载器,请求将分配给他们。但是我应该如何在我的代码中实现它?我应该创建一个ZIO[Configuration, Throwable, List[Downloader]]
,然后,然后通过执行所有这些collectAllPar
吗?我不知道如何在磁盘上写入聚合。
我想用这个项目在内部推广 ZIO。所以我想使用最好的选择和最干净的方法。有人可以给我一些关于如何实现这些效果和构建我的代码的提示吗? 编辑:我应该在 ZIO 组件上构建我的系统还是构建一组功能并将它们包装到 ZIO 效果中?
非常感谢