У меня есть простая программа, которая более-менее является загрузчиком. Он собирает один или несколько настраиваемых ресурсов (через настраиваемый протокол), объединяет и записывает их на месте.
Эта программа кажется простой, но код все еще сложен и сочетает в себе функциональный и процедурный код (из моего фона 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)?
Отредактировано б) Я должен создать по одному загрузчику для каждой цели, запрос будет назначен им. Но как мне реализовать это в моем коде? Должен ли я создатьZIO[Configuration, Throwable, List[Downloader]]
, а затем выполнить их все черезcollectAllPar
?Понятия не имею, как записать агрегацию на диск.
Я хотел бы использовать этот проект для внутреннего продвижения ZIO. Поэтому я хотел бы использовать лучшие варианты и самый чистый подход. Может кто-нибудь дать мне несколько советов о том, как реализовать эти эффекты и структурировать мой код? Отредактировано: Должен ли я построить свою систему на компонентах ZIO или создать набор функций и обернуть их в эффекты ZIO?
Большое спасибо