Size: a a a

Эликсир и Вунш

2019 March 20

DS

Dmitry Shpagin in Эликсир и Вунш
вечные холивары, что макросы зло и прочее
источник

ŹR

Źmićer Rubinštejn in Эликсир и Вунш
Макросы лучше apply, по вполне понятной причине
источник

DR

Dmitry Russ (Aleksandrov) in Эликсир и Вунш
Противники макросов вряд ли стали бы использовать Elixir, который на них построен.
источник

DR

Dmitry Russ (Aleksandrov) in Эликсир и Вунш
По поводу отделения GenServer-а от структуры данных - я думаю так, если структура данных и вычисления представляют какой-то интерес вне GenServer-а, т.е. другой человек может получить от этого профит - имеет смысл разделять, если не представляет интереса, то разделять не стоит, а тестировать можно и через вызовы handle_call напрямую.
источник

ŹR

Źmićer Rubinštejn in Эликсир и Вунш
Кроме того, state в одном месте а logic в другой никак не может соотнестись с solid, потому что с точки зрения архитектуры данные без операций над ними не имеют смысла
источник

ŹR

Źmićer Rubinštejn in Эликсир и Вунш
Именно поэтому в ООП, который в основном и ассоциируется с солид, и данные и методы сконцентрированы в объекте класса, в отличие от ФП
источник

ŹR

Źmićer Rubinštejn in Эликсир и Вунш
Кроме того, у генсервера есть стандартный функционал разделения, для этого одним из параметров GenServer.start_link указывается модуль с коллбэками
источник

IA

Ilya Averyanov in Эликсир и Вунш
logic генсервера заключается в предоставлении доступа к структуре данных со своими методами
источник

IA

Ilya Averyanov in Эликсир и Вунш
State не нужно хранить в отдельном месте, в отдельном месте нужно кранить структуру данных и методы работы с ней
источник

DS

Dmitry Shpagin in Эликсир и Вунш
Źmićer Rubinštejn
Кроме того, у генсервера есть стандартный функционал разделения, для этого одним из параметров GenServer.start_link указывается модуль с коллбэками
Что-то я не понял, ты про первый агрумент?

Если я в модуле (Stack), где описываю генсервер, вместо GenServer.start_link(__MODULE__, …) напишу GenServer.start_link(StackModuleCallbacks, …) это будет вызывать куда больше вопросов и путаницы
источник

ŹR

Źmićer Rubinštejn in Эликсир и Вунш
Не вижу разницы с твоим apply в упор
источник

IA

Ilya Averyanov in Эликсир и Вунш
Вообще экономия на вызовах это какое-то луддитство, зависть к временам, когда разработка была сектой чуваков в вытянутых свитерах
источник

DS

Dmitry Shpagin in Эликсир и Вунш
с apply хотя бы видно, что у генсервера есть коллбэк, и какой модуль он вызывает.

Если колбэки передать в start_link, в которые почти никто никогда не смотрит - то это вызовет путанницу, т.к. зачем вообще описывать коллбэки, если они в другом модуле?
источник

DS

Dmitry Shpagin in Эликсир и Вунш
Źmićer Rubinštejn
Не вижу разницы с твоим apply в упор
ну и раз разницы apply и стандартной штуки генсервера для передачи коллбэков - нет, то о чем спор?
источник

ŹR

Źmićer Rubinštejn in Эликсир и Вунш
Я и не спорю. Просто динамический диспатч там где можно обойтись без него я считаю плохим кодом, и уверен что «правильно готовить генсервер» не так.
источник

IA

Ilya Averyanov in Эликсир и Вунш
Внутри самого генсервера типа нету динамического диспатча
источник

IA

Ilya Averyanov in Эликсир и Вунш
Надо тогда посоветовать хосе валиму написать свой генсервер, на макросах
источник

ŹR

Źmićer Rubinštejn in Эликсир и Вунш
Например, строка 13 реализации стека из статьи

{new_list, new_list}
источник

ŹR

Źmićer Rubinštejn in Эликсир и Вунш
И комментарий почему
источник

IA

Ilya Averyanov in Эликсир и Вунш
Чтоб разворачивалось все без диспатча
источник