185 похожих чатов

Всем привет. Сейчас я изучаю erlang по книге Erlang and

OTP in action. Дошел до главы где реализуется первый gen server на примере tcp rpc сервера. Меня очень сильно смутил код который пишет автор. Поэтому хочу у вас спросить это у меня архитектурно слоеная деформация или автор нарошно или нет но говнокодит?

Он написал всю программу в одном файле, тобишь и gen server и api запускающий gen server. Я сидел и получал ментальую боль от того что он не поделил их на разные модули высвабаждая пользователю модуля апи ген сервера. Я как обладатель free will решил их поделить и вышло у меня то что получилось на скрине(пока что без имплементации, представте что она есть). Код автора книги я приложил в ссылке на гитхаб, там сделано все в одном файле. Как по мне мое решение в 1000 раз правильнее, может быть в следующих главах автор перепишет этот скрипт но я хочу спросить сейчас, чтобы успакоится

Код автора книги - https://github.com/erlware/Erlang-and-OTP-in-Action-Source/blob/master/chapter_03/tr_server.erl

10 ответов

6 просмотров

Поделил на разные модули и допустил ошибку. Лучше делай по книге

Freezing-Death Автор вопроса
Sergei
Поделил на разные модули и допустил ошибку. Лучше ...

То есть делить не надо было? Или я поделил неправильно?

Freezing Death
То есть делить не надо было? Или я поделил неправи...

пока файл не сильно большой, обычно не выделяют логику в отдельный файл (только переиспользуемую). В коде обычно строкой-разделителем обозначают/разделяют секции с имплементацией ф-й ген поведений и логики.

Freezing-Death Автор вопроса

UPD: в скрине модуль sword_tcp_server вызывает не тот модуль в gen_server но суть думаю ясна что там должен быть sword_tcp_gen_server

Freezing-Death Автор вопроса
Nikita Vorontsov
пока файл не сильно большой, обычно не выделяют ло...

Понял. Спасибо. Делить модуль комментариями это конечно сильно Я не ругаюсь просто удивляюсь

Freezing Death
Понял. Спасибо. Делить модуль комментариями это ко...

такова идея ген-поведений - это то, что повторяется везде и всегда, для чего одно и то же каждый раз в отдельной файле писать?

Оно в одном модуле, потому что клиентские функции, это публичный апи этого модуля. Всё остальное -- детали реализации, и они приватные. Да, можно вынести серверную часть в отдельный модуль. Тогда публичным становится протокол общения клиента и сервера (аргументы в вызове gen_server:call) А это менее удобно, чем публичные клиентские функции, которые скрывают протокол.

Нет, ты сделал антипаттерн. Вызов метода на обьекте, т.е. Gen_server call на процессе разрывается и исполняется в одном модуле.

Сколько людей столько и мнений. В целом в Erlang и Elixir принято писать всё в одном модуле. Я видел как пишут в разных, но это скорее исключение. Тут нет правильного или неправильного варианта, есть только как принято и как не принято. Хочешь чтобы твой код был удобен для других разрабов — делай как принято. Если не хочешь, то делай как считаешь нужным, реки вспять не повернутся от этого

Похожие вопросы

Обсуждают сегодня

У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
что за асемблер кста?
Shvabrikk Nya
19
Добрый день! Пробую отловить исключение EConvertError: function _TryTextToDouble(var DoubleVar: Extended; Text: String): Boolean; begin try DoubleVar := StrToFloat...
Kirill Filippenok
19
Подскажите... Есть ли название у способа разработки кода, в котором: сперва пишут минимальную рабочую структуру: Напр. ввод, обработка, вывод, контроль. Потом эту структуру д...
Budemposmotret
6
В дизассемблере вижу, что строки пихают в регистры через lea, почему так, а не через mov?
Oleg
8
всем привет. реально ли понять чем в процессе занята память? delphi/linux, процесс свой
Handatros
12
embassy это топ фреймворк для эмбеддед на данный момент?
AS Sarb
23
Ребята, я 3 дня как вкатился в ардуино Думал на прогрессивном молодом языке Rust попилить что-нибудь А как-то грустно с библиотеками оказалось. Не подскажете почему так? Если...
AS Sarb
18
А где @Grinyaha уважаемый пропал?
Am Ambrion
14
Коллеги, а не могли бы вы подсказать, как происходит оптимизация кода при выполнении кода julia? (Точнее, как управлять уровнем оптимизации, аналогично LLVM/GCC). Потому что...
Илья Гаража
5
Карта сайта