Size: a a a

2020 October 05

DF

Denis Fakhrtdinov in pro.elixir
Я о best practices и стандартах.
источник

AB

Alex Bubnov in pro.elixir
Denis Fakhrtdinov
Я о best practices и стандартах.
главный best practice - сразу отдели важные данные от стейта генсервера
источник

PG

Pig Greenest in pro.elixir
Denis Fakhrtdinov
Я о best practices и стандартах.
Обычно структуру объявляют
источник

DF

Denis Fakhrtdinov in pro.elixir
Окей, спасибо.
источник

AB

Alex Bubnov in pro.elixir
Alex Bubnov
главный best practice - сразу отдели важные данные от стейта генсервера
в смысле, вложи их отдельно в этот стейт, и работай с ними отдельным набором функций. чтобы генсервер был скорее деталью реализации, а с этими "важными данными" можно было работать и без него.
источник

DF

Denis Fakhrtdinov in pro.elixir
С этим я разберусь, спасибо.
источник

AB

Alex Bubnov in pro.elixir
есть какой-то способ получить из феникса адекватные логи?
у меня получился вот такой poc, но это кошмар же
https://gist.github.com/nwalker/0f20b2aef0e5c06b4b27bd704278db06
источник

LL

Lama Lover in pro.elixir
Pig Greenest
Обычно структуру объявляют
Я использую мапу. Структуры имеют смысл только когда по ним матчишь или протоколы используешь. Если свет никогда не увидит этой структуры, то почему ты не использовать мапу?
источник

DS

Dmitry Shpagin in pro.elixir
Lama Lover
Я использую мапу. Структуры имеют смысл только когда по ним матчишь или протоколы используешь. Если свет никогда не увидит этой структуры, то почему ты не использовать мапу?
У структуры четкий набор полей, к каждому из которых еще можно описание написать в  виде коммента.

Мапа же никем и ничем неограничена, ты её в одном модуле объявишь с одним набором ключей, а кто-то по пути обработки мапы оттуда половину ключей вытащит и новых добавит
источник

DS

Dmitry Shpagin in pro.elixir
в итоге фиг поймешь что это за чудо юдо рыба кит
источник

LL

Lama Lover in pro.elixir
Dmitry Shpagin
У структуры четкий набор полей, к каждому из которых еще можно описание написать в  виде коммента.

Мапа же никем и ничем неограничена, ты её в одном модуле объявишь с одним набором ключей, а кто-то по пути обработки мапы оттуда половину ключей вытащит и новых добавит
Во-первых, тут мапа — стейт генсервера, никто другой её не поменяет. Во-вторых, для валидации того что функция не меняет набор ключей есть диалайзер
А касательно комментариев — я пишу тайпспеки, а там можно и тип и комментарии и всё что угодно
источник

DF

Denis Fakhrtdinov in pro.elixir
Стракт максимально близок к рекорду, поэтому я его тоже поюзал.
источник

DS

Dmitry Shpagin in pro.elixir
> Во-вторых, для валидации того что функция не меняет набор ключей есть диалайзер

Не видел такого, можешь пару примеров накинуть?
источник

B

Bogdan in pro.elixir
Это он значит на каждый Map.put должен реагировать?
источник
2020 October 06

PG

Pig Greenest in pro.elixir
Bogdan
Это он значит на каждый Map.put должен реагировать?
нет, только на те, у которых тип ключа не сходится с ожидаемым
источник

B

Bogdan in pro.elixir
Я такого не замечал, странно.
источник

LL

Lama Lover in pro.elixir
Dmitry Shpagin
> Во-вторых, для валидации того что функция не меняет набор ключей есть диалайзер

Не видел такого, можешь пару примеров накинуть?
источник

P

Pavel in pro.elixir
Кто-то не пишет тайпспеки? 🙂
источник

DS

Dmitry Shpagin in pro.elixir
Спасибо)
источник

SM

Sergei Maximov in pro.elixir
Lama Lover
Я использую мапу. Структуры имеют смысл только когда по ним матчишь или протоколы используешь. Если свет никогда не увидит этой структуры, то почему ты не использовать мапу?
Я обычно использую struct и туда же запихиваю логику изменения стейта в виде отдельных функций. В результате большая часть генсерверов выглядит так

def handle_cast({:do_something, value},  state) do
 {:noreply, State.do_something(state, value)}
end

и в таких случаях сами сервера часто можно не тестировать, а просто писать тесты на стейт.
источник