Pull to refresh

Comments 15

Интересно! Сравнение не совсем корректное, однако, рецепты очень похожи на сниппеты в MODX.
Может я отстаю от тренда или чего не понял, но очень не понравился flex в реальном проекте. Слишком много магии и большая сложность если с нуля разбираться.
У flex, имхо, целевая аудитория должна быть — DevOps-ы, но зачем тогда такой узкоспециализированный инструмент?
Ну пока да, выглядит как сложность для разработчиков, но бандлы и пакеты подключать действительно проще, хоть и накладывает на их разработчиков некоторые требования.
В чем там магия и сложность?
Почему для devops? Это удобно для быстрых шаблонных проектов.
1) Магия для конечного пользователя — куча системных зависимостей получается.
2) Вот для чего, например, надо сводить в один инструмент git и env? Это же чисто упрощение развертывания, а не разработки. Для разработки всё что делает flex или из шаблонного проекта копипастится, или генерируется IDE.
Где свели в один инструмент git и env? если вы про dotenv, то по факту это инструмент, позволяющий мокать энвы через файл для локальных окружений, где их тяжело поддерживать одинаковыми путем системных инструментов. Он даже «по канону» включается только тогда, когда не определена перенная APP_ENV в окружении

Также этот инструмент позволяет использовать .env файлы, которые использует тот же docker compose для того, чтобы не пересобирать приложение во время разработки

Так что dotenv — это упрощение именно разработки для тех людей, где прод построен на энвах
Магия для конечного пользователя — куча системных зависимостей получается.

Предположим что мы начали проект с использованием flex и поставили при помощи него 10 пакетов. Наш проект зависит от этих 10-ти пакетов. Можем ли мы добавить еще/удалить их без использования flex? можем. Стало быть зависимости нашего проекта от flex нету. Можем ли мы менять зависимости без composer? можем но сложно, так как наш проект зависит от системы автозагрузки классов composer-а. Однако эта связь осуществляется через абстракцию — slp_autoload. То есть мы можем спокойно заменить ее на свою, но вряд-ли вы будете так делать.


Резюмирую вопрос. Какие кучи системных зависимостей вы видите?


надо сводить в один инструмент git и env?

а откуда взялся git в этой связке? Вы можете использовать symfony flex и без git. Например если все зависимости спокойно можно стянуть по http.


Это же чисто упрощение развертывания, а не разработки.

а вы не разворачиваете то что разработали? Даже локально?


Для разработки всё что делает flex или из шаблонного проекта копипастится, или генерируется IDE.

Давайте прикинем что нам нужно копипастить/генерировать:


  • копипастить конфиги модулей, даже если нам требуется дефолтные настройки
  • генерировать… да ничего нам не нужно генерировать.

То есть flex — это чисто для копипасты конфигов при установке пакетов. IDE нам тут не поможет. Если вы предлагаете копипастить конфиги из шаблонного проекта — это значит что нам надо сделать такой проект и поставить туда все эти пакеты. Причем даже те которые вам не нужны по дефолту.


К чему это нас приводит:


  • жирный стартовый проект переполненный зависимостями которые вам не нужны
  • подсознательное стремление разработчиков обойтись тем что есть что бы "не ставить нового ибо надо будет копипастить конфиги уже из ридми".
  • усложнение флоу разработки.

Что же предлагает нам flex — лишь возможность разработчикам пакетов описать "настройки по умолчанию" которые в явном виде будут автоматически прописываться в ваш проект. Далее разработчику остается лишь подправить настройки под себя. Отпадает необходимость держать переполненный зависимостями шаблонный проект и использовать ровно то что нужно.

Причём тут девопсы вообще? Ну и никто не запрещает вам не использовать flex, а устанавливать и, главное, конфигурировать пакеты по старинке — для девопсов разницы нет, кроме того, что минус одна зависимость, причём с большей вероятностью могущей вызвать проблемы при обновлении, поскольку это не либа или бандл, а композер плагин.
С весны слежу за skeleton. Поддерживаю предыдущего оратора и очень интересен взгляд Fesor на это.
Поддерживаю предыдущего оратора

в чем именно? в том что "целевая аудитория — дэвопсы"?


  1. devops это идея о том что dev-ы и ops-ы должны меньше сориться и больше общаться. Это и менеджмент конфигураций нормальный и все такое. нынче дефакто стандарт — переменные окружения и секреты, контейнеры и все такое. Это затрагивает обе стороны. Можете подробнее познакомиться с идеями что есть современный бэкэнд: https://12factor.net/
  2. по поводу магии — это просто плагин для composer. Не вижу никакой черной магии которую стоит бояться.
  3. мне нравится идея что дефолтные настройки бандла будут сами добавляться и не нужно будет тратить пару минут на редактирование конфигов. Это позволит больше дробить проекты на небольшие пакеты и проще будет их менеджить.

мне в symfony flex нравится все кроме makefile-ов разве что но вроде как от них отказались

Да, отказались после публичного голосования, добавив symfony/console в основные зависимости скелета.

А чем именно мейкфайлы не нравятся?

  1. Лишняя системная зависимость, не везде может быть из коробки, а где-нить под Windows установить непросто, наверное
  2. Не самый очевидный синтаксис и семантика для тех, кто видит его раз в полгода
  3. Если говорить именно о symfony, то в большинстве случаев просто ланчер для bin/console, иногда с фолбэками, иногда просто ошибку выводящий
Для начала нам понадобится консольтная утилита symfony lnstaller:

Как раз она нам и не понадобится. И это видно дальше по тексту. Symfony Flex — это замена инсталлятору. Реализованная в виде плагина к composer. С помощью этого плагина можно поставить и предыдущие версии Symfony (3.3 точно ставится).

Суть улучшения в более кросс-технологичных соглашениях (public vs web, config vs app/config, .env vs app/config/parameters.yml, *.yaml vs *.yml, etc). И в большей автоматизации на основе этих соглашений. Отдельные элементы автоматизации методично добавлялись и вылизывались в течение всех релизов третьей ветки (а некоторые появились ещё в 2.x).

Магия там под строгим контролем: любая неоднозначность при компиляции заканчивается бросанием исключения. И требует ручного конфигурирования.

Но, если совсем грубо, правильно описанные и разложенные абстракции, позволяют автоматически нагенерить очень много конкретики. И получить гораздо больше удовольствия от замечательного шаблона DI.

А управление внешними зависимостями позволило более аккуратно нарезать артефакты. Что позволяет не только устанавливать зависимости пачками, но и по-настоящему удалять их пачками в автоматическом режиме. При этом, везде остаётся возможность переконфигурировать, положить в другое место, написать свой рецепт…
Sign up to leave a comment.

Articles