Size: a a a

Scala User Group

2020 May 21

KM

Kovalyshev Michail in Scala User Group
Спасибо!
Как то я проглядел пример этот... (
источник

IP

Ilya Petrov in Scala User Group
Roman
И то и то нужно по-моему — если что-то можно в R ZLayer-a, то там ему и место, а какой-нибудь условный RequestContext отлично идет в R методов
Хм.. На тему Request Context имелось ввиду http request какой-нибудь?
источник

R

Roman in Scala User Group
Ilya Petrov
Хм.. На тему Request Context имелось ввиду http request какой-нибудь?
Да, например. Ну и в принципе что-то короткоживущее по сравнению с типичными сервисами, и при этом достаточно вездесущее, что бы передавать явно через аргументы было неудобно.
источник

IP

Ilya Petrov in Scala User Group
Roman
Да, например. Ну и в принципе что-то короткоживущее по сравнению с типичными сервисами, и при этом достаточно вездесущее, что бы передавать явно через аргументы было неудобно.
Идею понял
источник

IP

Ilya Petrov in Scala User Group
Спасибо
источник

IP

Ilya Petrov in Scala User Group
Oleg ℕizhnik
Это правильно. Код финтех школы принципиально не модуляризированный, вы можете либо выкинуть R из результатов, либо заменить Budget на F. В обоих случаях  вы теряете информацию о реализации.

Но такой подход это просто компромис между подходами с наиболее простой, как мне показалось структурой.

Тэглесс файнал альтернатива есть в той же репе, зио модульную тоже можно написать, но не уверен, что я хочу
Спасибо за развернутый ответ
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Roman
И то и то нужно по-моему — если что-то можно в R ZLayer-a, то там ему и место, а какой-нибудь условный RequestContext отлично идет в R методов
сомнительная рекомендация немного
источник

Oℕ

Oleg ℕizhnik in Scala User Group
если у меня есть какой-то контекст запроса, и он как-то цепляется референсами за куски исходного байтбуфера с телом или мапок с парсингами, он может удерживать увесистую структуру от ГЦ
этот параметр передаётся внутри какого-то Has в очередную операцию, но дальше при композиции с последующими операциями, даже если они уже не требуют его в контексте, на самом деле не уходит оттуда,
в результате если у вас запросы запускают какие-то долгоживущие операции всё, что вы так ненадолго сложили в качестве доп-контекста в Has остаётся как кусок энваройнмента во всех файберах, порожденных этим вызовом
источник

Oℕ

Oleg ℕizhnik in Scala User Group
т.е. если сравнить с имплиситом

сигнатура
(implicit foo: Foo)

vs
[... with Has[Foo]]


использование
foo

vs
ZIO.access(_.get[Foo])


передача

bar(...)(foo)


vs
bar(...).provideSome(_ add foo)
источник

R

Roman in Scala User Group
Oleg ℕizhnik
если у меня есть какой-то контекст запроса, и он как-то цепляется референсами за куски исходного байтбуфера с телом или мапок с парсингами, он может удерживать увесистую структуру от ГЦ
этот параметр передаётся внутри какого-то Has в очередную операцию, но дальше при композиции с последующими операциями, даже если они уже не требуют его в контексте, на самом деле не уходит оттуда,
в результате если у вас запросы запускают какие-то долгоживущие операции всё, что вы так ненадолго сложили в качестве доп-контекста в Has остаётся как кусок энваройнмента во всех файберах, порожденных этим вызовом
согласен, это надо учитывать
в моем случае удерживать части исходного байтбуффера не подразумевалось, я там имел в виду скорее что-то уровня "trace id" или набор feature flags — эта информация нужна в том числе и в форкнутых файберах (который, впрочем, довольно часто и нет)

но теперь стало интересно, как научить zio "очищать" env от ненужных Has автоматически
источник

Oℕ

Oleg ℕizhnik in Scala User Group
и переданный таким образом контекст всегда будет погружать операции в URIO как минимум
источник

Oℕ

Oleg ℕizhnik in Scala User Group
т.е. нельзя будет в чистой функции использовать foo
источник

Oℕ

Oleg ℕizhnik in Scala User Group
@jey_lee @kai_neko JDG же отстаивает позицию, что ТФ должен иметь форму [-_, +_,+_],
т.е. есть какие-то реальные кейсы, где локальный контекст операций полезен, что-нибудь можете привести?
источник

K

Kai in Scala User Group
Oleg ℕizhnik
@jey_lee @kai_neko JDG же отстаивает позицию, что ТФ должен иметь форму [-_, +_,+_],
т.е. есть какие-то реальные кейсы, где локальный контекст операций полезен, что-нибудь можете привести?
ну логгер например
источник

Oℕ

Oleg ℕizhnik in Scala User Group
какой-то MDC-like?
источник

K

Kai in Scala User Group
или еще что-то очень локальное, например контекстно-зависимый таглесс-интерпретер
источник

K

Kai in Scala User Group
Oleg ℕizhnik
какой-то MDC-like?
Ну логстейжевский контекст логгер например xxx.provide(log.withCustomContext("userId" -> userId))
источник

Oℕ

Oleg ℕizhnik in Scala User Group
т.е. в качестве R в таких операциях предполагается использовать не Has, который смешается с основным, а просто какое-то данные на одноразовый provide?
источник

K

Kai in Scala User Group
Не, с поправкой на Has канеш
источник

K

Kai in Scala User Group
Has полезный
источник