Некоторое время назад в процессе расширения своих познаний в области веб разработки окунулся в прекрасный мир программирования на elixir и в частности использования фреймворка Phoenix. Не так давно он (Phoenix) обновился до версии 1.3 и как я обнаружил все мои познания пошли прахом — всё перевернуто с ног на голову и в общем весь опыт в этой области можно смело выбросить на помойку. Ситуация в мире ИТ не нова, а вариант решения всего один — разобраться со всем этими нововведениями и начать жить заново.
Итак первое, что бросилось в глаза — mix
-овые задачи сменили префикс с phoenix
на phx
. В общем-то неплохо и я даже этому скорее рад ибо люблю лаконизм во всех его проявлениях.
Второй момент, который насторожил, это исчезнувшая директория web
, но её содержимое быстро нашлось. Не вполне понял смысл этого действа, но пишут, что типа стало меньше неоднозначности куда складывать код — типа раньше были две папки lib
и web
, а сейчас осталась только lib
. Ну ладно — проглотим. Собственно ничего деструктивного тут не вижу.
Теперь проблемы посерьёзнее — как оказалось теперь phoenix
не рекомендует создавать модели, а предлагает создать вместо модели схему. Ну ок — пробуем. Ну да теперь вместо модели, теста и миграции создаётся только файл схемы и миграция. Хммм … ну что — вполне логично. Собственно и раньше модели были довольно странными и нифига не были похожи на те модели к которым мы привыкли. Скорее это была концепция объектов и репозитариев, где данные и способы их хранения фактически были разными сущностями. Похоже решили пока не поздно назвать таки вещи своими именами во избежание путаницы. Ладно — годное изменение.
Теперь при создании схемы обязательно указывать контекст или пространство имён (модуль) для схемы. Соответственно все методы для работы с данными будут выполняться в этом контексте (пространстве имён или модуле). Соответствующим образом изменились генераторы обязательно указывать название контекста. Вообще в релиз ноте используется термин контекст, так, что буду далее называть его именно так, хотя по мне так слишком обобщённый термин и может привести к путанице.
Модели похоже вообще исчезли как класс. Вся логика похоже переезжает как раз в эти самые контексты. Как-то придётся переосмыслить подходы к построению приложений. Походу один контекст сейчас может объединять несколько схем. Остаётся вопрос как быть если схема нужна сразу нескольким контекстам. Есть повод подумать и порыть информацию.
Ха! Я тут порыл немного по теме — контексты это просто отличная идея. Теперь не нужен весь этот код в контроллерах для сохранения моделей — changeset-ы, репозитарии — все это уехало как раз в контексты. И если раньше код контроллеры выглядел как-то так:
1 | ... |
То теперь вс выглядит как-то так:
1 | ... |
т.е. как ни парадоксально избавившись от моделей работа с данными стала больше походить на классическую работу с моделями, принятую в других языках.
Похудели контроллеры — навскидку стало меньше кода. Это не может не радовать — в старом phoenix
-е херова гора лишнего кода изрядно раздражала.
Добавился fallback контроллер, теперь все ошибки можно тупо ловить и обрабатывать в нём, а не писать оромные case
-ы в каждом котроллере. Ну да — они пишутся генераторами автоматически, но потом это гуано разгребать довольно утомительно. В rails
такая тема есть уже давно и как-то даже странно слышать об этом как о каком-то значимом улучшении, но тем не менее появление такого функционала в phoenix
определённо шаг вперёд, хотя и говорит о том, что phoenix
-у ещё расти и расти.
Источники вдохновения
- https://habrahabr.ru/post/332898/
- https://medium.com/wemake-services/why-changes-in-phoenix-1-3-are-so-important-2d50c9bdabb9
- http://phoenixframework.org/blog/phoenix-1-3-0-released
- https://robots.thoughtbot.com/lessons-from-using-phoenix-1-3
- http://michal.muskala.eu/16.05.2017/putting-contexts-in-context.html#now-my-context-modules-are-huge
- https://www.youtube.com/watch? v=tMO28ar0lW8
- https://www.youtube.com/watch? v=hfssz8U0JD0
Комментарии