Size: a a a

2020 October 06

ŹR

Źmićer Rubinštejn in pro.elixir
Denis Fakhrtdinov
Это, типа, функции в стракте как поля пишутся?
Это было бы слишком жостко
источник

DF

Denis Fakhrtdinov in pro.elixir
А, это для мутации стейта отдельный модуль.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Я как-то пытался намутить ООП на лямбдах в эликсире, но почему-то недоделал - не помню уже почему
источник

SM

Sergei Maximov in pro.elixir
Źmićer Rubinštejn
Вот это самая тырпрайз тема. Думаю, в идеале так и надо писать
Не, про самую тырпрайз тему я прочитал не помню где. Делаем короч для каждого традиционного генсервера 4 модуля: Thingy, Thingy.Server, Thingy.State, Thingy.Impl.

Thingy содержит публичное API (в основном, это вызовы GenServer.call(Thingy.Server, ...) и иже с ними)

Thingy.Server - это непосредственно генсервер, он содержит только колбэки и вызывает Thingy.Impl

Thingy.Impl
содержит всю бизнес-логику генсервера; он же вызывает Thingy.State для изменения стейта.

Но это немного перебор, наверно.
источник

LL

Lama Lover in pro.elixir
Źmićer Rubinštejn
Я как-то пытался намутить ООП на лямбдах в эликсире, но почему-то недоделал - не помню уже почему
Потому что это бесполезно?)
И в замыкания стейт нельзя поменять, кстати
источник

DF

Denis Fakhrtdinov in pro.elixir
Читать стектрейсы такого ООП будет тем ещё удовольствием.
источник

DF

Denis Fakhrtdinov in pro.elixir
fun на fun через fun.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Lama Lover
Потому что это бесполезно?)
И в замыкания стейт нельзя поменять, кстати
Да, нельзя. Да, бесполезно. Но недоделал почему-то по другому Ж)
источник

AL

Anton Lapshin in pro.elixir
Sergei Maximov
Не, про самую тырпрайз тему я прочитал не помню где. Делаем короч для каждого традиционного генсервера 4 модуля: Thingy, Thingy.Server, Thingy.State, Thingy.Impl.

Thingy содержит публичное API (в основном, это вызовы GenServer.call(Thingy.Server, ...) и иже с ними)

Thingy.Server - это непосредственно генсервер, он содержит только колбэки и вызывает Thingy.Impl

Thingy.Impl
содержит всю бизнес-логику генсервера; он же вызывает Thingy.State для изменения стейта.

Но это немного перебор, наверно.
если код развесистый, разделить определённо имеет смысл, и по такой схеме вполне нормально, кажется, должно быть, вай нот
источник

AL

Anton Lapshin in pro.elixir
а если генсервер пару параметров в стейте хранит, по одному handle_info/handle_call да пару функций для работы - ну, такое я бы не стал дробить точно
источник

SM

Sergei Maximov in pro.elixir
Anton Lapshin
если код развесистый, разделить определённо имеет смысл, и по такой схеме вполне нормально, кажется, должно быть, вай нот
В отдельных случаях это может быть полезно, но в большинстве будет оверкил
источник

AL

Anton Lapshin in pro.elixir
именно
источник

DF

Denis Fakhrtdinov in pro.elixir
Непонятно зачем разделять Server и Impl.
источник

DF

Denis Fakhrtdinov in pro.elixir
Если всё что делает Server — это вызовы Impl.
источник

AL

Anton Lapshin in pro.elixir
чтобы имплементацию менять? навроде DI?
источник

AL

Anton Lapshin in pro.elixir
но я точно не знаю, только предполагаю
источник

DF

Denis Fakhrtdinov in pro.elixir
Что, в рантайме прям?
источник

AL

Anton Lapshin in pro.elixir
не, скорее при компиляции определять в зависимости от чего-либо (настроек окружения)
источник

RK

Roman Kolesnev in pro.elixir
Denis Fakhrtdinov
Непонятно зачем разделять Server и Impl.
Чтобы отделить delivery layer (server) от слоя с логикой?
источник

DF

Denis Fakhrtdinov in pro.elixir
А зачем?
источник