Что может дать изучение Symfony разработчику Laravel?
=======================================================

 Более 2-ух лет работаю на Laravel. Приглядываюсь к Symfony. Сложилось впечатление того, что Symfony дает более глубокое понимания ООП и правильного проектирования веб-сервисов. Тем-не-менее, Laravel удобнее, а слухи о том, что серьезные приложения часто переписывают на Symfony тоже слышал многократно, только хотелось бы услышать подтверждение этому.   

  

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

  

Из того, что читал самым весомым заключался в том, что на Symfony есть некие рамки, которые не позволяют писать "говнокод". Это по сути аналог Java идеологически, только на php.  

  

Скажите кто знает что об этом лучше думать? Задача - не деньги, а проф рост. 

**Symfony, как и другой фреймворк - инструмент.** Различия фреймворков я недавно изложил в вопросе: [Актуален ли Yii2 Фреймворк в 2020?](https://qna.habr.com/q/779933#answer_1637855)   

  

Да, Symfony более строгий в разработке и приятный. **Если вы знаете как писать хороший код, то вы и без фреймворка это сделаете**. Но если вы не знаете принципов/стандартов, то и Symfony вас не убережёт от плохого кода. Разве что на Symfony это сделать на много сложнее в каких-то моментах, но думать о том, что он из вас сделает профессионала и улучшит стиль написания кода - бред)  

  

Вот вам [пример](https://github.com/Myks92/vmc-event) хорошего кода на Yii2. Хотя на нём писать хороший код ещё сложнее.  

  

Попробуйте написать PHP библиотеку, которая совместима с **любым** фреймворкам. И вы поймёте, что хороший код не зависит от фреймворка. Потому что его там нет.   

  

**Поэтому любой фреймворк != хороший код.** Хороший код зависит от программиста, его знаний и практик. Вам следует поучиться различным архитектурам: ООП, DDD, CQRS. Правильная архитектура – уже залог хорошего кода. Изучить другие стандарты чистого кода. Правило SOLID и так далее. 

 Symfony не загоняет в жесткие рамки разработчика и на нем точно также можно писать лапшу, как и на Laravel.  

  

Мне 3 недели назад достался довольно успешный европейский стартап, написанный на Symfony. Открыл код и ужаснулся:  

* Нет никакого SOLID, вся логика находится в контроллерах вместе с валидацией. И валидация делается не через компонент Validator, а ручками через `empty()`, `isset()` и тд.
* Какие-то костыльные и кастомные события и тд.
* Нет брокеров сообщений и из-за этого задержка в эндпоинтах доходит до 5-ти секунд.
* Очень медленные тесты, 4709 assertions проходили за 54 минуты на локальной машине с i7 10-го поколения. За пару дней мне удалось сократить это время до 70 секунд. Теперь CI/CD очень быстрый и CTO вне себя от счастья.

  

И на Laravel я видел крутые с точки зрения кода проекты, в которых было приятно участвовать. Там есть тот же DI, ивенты/события, можно интегрировать Doctrine если сильно хочется. Не хочешь фасады, юзай [контракты](https://laravel.com/docs/7.x/contracts#contract-reference). Вот даже [пример](https://www.youtube.com/watch?v=7HXIrEsmlzM) есть Laravel-проекта с DDD. 

 Фреймворк рассчитан на длительные проекты, лучше качество кода, выше требования к разработчику. Разная кривая сложности: что-то небольшое делать сложнее, но со временем стоимость инкремента увеличивается не так быстро, как в Ларавеле.  

  

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

Я бы рекомендовал симфони как следующий этап в развитии разработчика. 

 Работал и с Laravel и с Symfony.  

Laravel это как черный ящик, которым пользуешься не особо вникая как оно работает. Почитать исходники конечно можно, но от версии к версии, разработчики переписывают имплементацию своей "магии", так что никогда нет уверенности в том, как оно работает в этой версии.  

У Laravel свой путь, он спроектирован так, что пользователям laravel в небольших проектах не нужно знать PHP вообще.  

  

У Symfony из коробки нет такой магии и многое нужно пилить самому. Кода больше, времени больше, порог входа выше. Большое внимание уделено конфигам (yaml).  

  

В Laravel нарушают паттерны, используют антипаттерны в угоду скорости написания небольших проектов. С другой стороны, разделение на паттерны и антипаттерны это лишь частное мнение каких-то разработчиков, пусть и опытных, и не факт, что они не будут называть паттерном то, что сейчас называют антипаттерном и наоборот. В подходах к разработке всё меняется и через 5 лет мнение большинства о best practices может поменяться.  

  

Что может дать опыт работы на Symfony разработчику который работал только с Laravel? Опыт, и понимание того, что магия есть не везде, а иной раз она мешает, опыт работы с другими паттернами (ActiveRecord vs DataMapper), расширение кругозора как разработчика.