Дело GetX живет

Я — MADTeacher, автор книг по Dart/Flutter/ИИ в программировании и преподаватель. На канале разбираю свежие фичи языка и фреймворка, объясняю, как и когда их применять, и показываю всё на живых примерах кода. Меньше воды — больше практики: от конструкторов и метапрограммирования до производительности, интеропа и тестирования, а также поднимаю тему использования ИИ для разработки программных продуктов. Если хотите понимать Dart и Flutter в эпоху ИИ глубже — вы по адресу.

getxnyloflutter

Наткнулся на днях на очередной швейцарский нож в виде микро-фреймворка для разработки Flutter-приложений - Nylo. Он включает в себя State Manager, навигацию, работу с сетью, локализацию, собственный небольшой пакет виджетов и аутентификацию «прям из коробки»… 👀

Мягко выражаясь, я малость прифигел от увиденного в коде… ну серьезно… GetX на фоне этого треша смотрится просто сыном маминой подруги или бабушкиным пирожком, которого хочется потискать за его пухленькие щечки 😄

Прямо в документации поощряется черная магия, которая позволяет обновлять состояния виджета из черти знает какой части приложения (точнее, как заявлено, из любой) и все это под соусом глобального хранилища состояний со строковыми идентификаторами:

// Sending an action to the widget
stateAction('hello_world_in_widget', state: MyWidget.state);

// Another example with data
stateAction('show_high_score', state: HighScore.state, data: {
  "high_score": 100,
});

// stateAction handler
@override
get stateActions => {
  "hello_world_in_widget": () {
    print('Hello world');
  },
  "reset_data": (data) async {
    // Example with data
    _textController.clear();
    _myData = null;
    setState(() {});
  },
};

Это же черная дыра типобезопасности, всякие приколюхи с ошибками в рантайме и ад для любого, кто захочет удариться в рефакторинг проекта… и все это благодаря опечатки всего лишь в одном символе 🥲

Что же касается самого подхода, в котором виджет можно обновить «из любого места» через глобальный вызов updateState - его придумал слуга дьявола!!! В неумелых руках он быстро превратится в аналог event-bus, где невозможно будет понять кто инициировал событие, сложно восстановить причинно-следственную цепочку при сложном флот пользователя, да и отладка из себя будет представлять то еще «удовольствие» 🤔

Дополнительной вишенкой на торте выступают примеры в документации, поощряющие создание «толстого UI», в котором такие операции, как инициализация, загрузка, хранение, реакции на события накуканены на слой presentation. Да, это удобно для новичков вкатывающихся в сам Flutter, но такое размытие границ слоев, если мы говорим про долгоживущие приложения, приведет только к большему геморрою на этапе поддержки и добавления новых фич🫠

Ну и как вишенка на торте - это фреймворк! А значит он требует от вас соблюдений его архитектурных правил, навязывая мнение своего создателя и удачи тем, кто реализовав приложение с помощью этого очередного швейцарского ножа, решил мигрировать на стандартные решения с BLoC, Provider и т.д. Таким людям явно не помешает перед началом этого процесса разжиться тефлоновой накидкой для кресла 🤣

p.s. А как вы относитесь к таким фреймворк-комбайнам?))

Размытое тёмное фото двух человек в помещении, фон неразборчив, лица неидентифицируемы — похоже на бытовой снимок с вечеринки.
Превью-изображение поста; случайный бытовой кадр, не идентифицирующий людей.

Дискуссия

\n
Я хотел использовать этот фреймворк, т.к. это аналог artisan из Laravel, который на PHP. Если не знаете, то это что-то типа mason. Есть определённая архитектура, далее через вызов команд ты можешь быстро создавать контроллеры, модели, миграции для баз и многое-многое другое. Перейдя с него меня подбешивает регулярно делать однотипные операции. Ну и Laravel это единый фреймворк, компоненты которого тесно связаны между собой. Flutter же не такой, тут ему пришлось самому всё реализовать и придумывать интерфейсы взаимодействия между компонентами. Этот разработчик вдохновлялся этим инструментом. Но изучая доку, я таких моментов сразу не увидел, но было ощущение, что он слишком пытается натянуть мир flutter на опыт с laravel, а не адаптировать его. Ну и он практически единственный разработчик, а это риски как по поддержке, так и по качеству. В Laravel поверх многих стандартных библиотек, свои сервисы, так что смена типа базы данных или кэша не заставляет переписывать код, но это всё писалось и оттачивалось годами и тысячами разработчиков.
Dominic Herzog
имея - не ценим, потеряв - плачем...GetX
Ilushnik
\n
Я хотел использовать этот фреймворк, т.к. это аналог artisan из Laravel, который на PHP. Если не знаете, то это что-то типа mason. Есть определённая архитектура, далее через вызов команд ты можешь быстро создавать контроллеры, модели, миграции для баз и многое…
Так и в GetX есть генератор контроллеров вьюх и роуминга, что очень ускоряет разработку. У меня даже есть продовый опыт использования GetX. Проект не прям уж большой, конечно. Его успешно реализовали, поддерживали и, когда доработки закончились, отдали исходники. Были некоторые проблемы с утилизацией контроллеров, но всё решили. Ещё один фреймворк который я нашел, это stacked. Он ещё и юнит тесты вьюмодели генерит автоматом при его создании. Последний, так не удалось толком попробовать. В общем, я тоже любитель автогенерации кода)
\n
Ilushnik
Так и в GetX есть генератор контроллеров вьюх и роуминга, что очень ускоряет разработку. У меня даже есть продовый опыт использования GetX. Проект не прям уж большой, конечно. Его успешно реализовали, поддерживали и, когда доработки закончились, отдали исходники.…
Ну вот как раз после Laravel каждый раз ручками всё создавать сильно бесит. Сейчас создаешь новый экран, не забудь сразу папки под модели, экран и провайдеры, не забудь про роутинг и т.д. Везде код пустышку добавь. Я слишком ленив для этого) думал кодовая база не такая обширная для getx, но гляну.
Ilushnik
\n
Ну вот как раз после Laravel каждый раз ручками всё создавать сильно бесит. Сейчас создаешь новый экран, не забудь сразу папки под модели, экран и провайдеры, не забудь про роутинг и т.д. Везде код пустышку добавь. Я слишком ленив для этого) думал кодовая…
Генератор тут https://pub.dev/packages/get_cli
Присоединиться к обсуждению →

Читайте так же