Advent, Episode 14: Почему Symfony2

Роман Лапин — Dec 15, 2014    advent2014

Previously on Evercode Lab Advent

…солидная экспертиза по фреймворку Symfony2, на котором сделано множество проектов, про который сделано несколько докладов и проведено консультаций

Все перечисленные проекты мы реализуем на базе фреймворков: Symfony2, Ruby on Rails, реже Yii, Silex и другие.

…для проектов на Symfony2 мы придерживаемся ее стандартов, которые в свою очередь полагаются на рекомендации PHP Framework Interop Group.

Choose wisely

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

Выбирали из PHP фреймворков, так как на этом языке имели наибольший опыт работы. Умели еще Python, но существенно меньше, рисковать не хотелось. С Ruby тогда мы еще не работали вообще. Это был конец 2011 года, количество PHP фреймвоков уже тогда было внушительным. CMS мы не рассматривали. Хотелось работать с чем-то надежным, завершенным, удобным, продвинутым, перспективным, хорошо документированным и имеющим коммьюнити вокруг, которое создает уже готовые расширения. В итоге, после исключения устаревших, некрасивых и мелких в списке вариантов остались следующие:

  • Symfony 2
  • Zend Framework 1
  • Yii 1

До этого мы много работали с ZF1 на предыдущих местах работы, знали его хорошо. И еще лучше знали его минусы, возиться с которыми больше не хотелось. ZF2 уже был в разработке какое-то время, но дата релиза была не ясна, нестабильную версию брать было опасно.

С Yii ситуация похожая, но предыдущего опыта было меньше. Вторая версия уже планировалась, но до релиза дошла только в текущем, 2014 году. Впечатление от фреймворка было приятное, но тот небольшой предыдущий опыт был не слишком удачным с точки зрения удобства разработки крупных веб-приложений.

Так выбор и пал на Symfony.

Мы работаем с новой Symfony, начиная с версии 2.0, тогда еще даже composer’а не было, а зависимости ставились через специальный консольный скрипт. Кстати, с версией фреймворка 1.0 мы никогда не работали. Преимущества были следующие:

  • понятная и цельная архитектура на базе независимых компонентов
  • использование современных фич языка
  • красивое использование паттернов программирования
  • хорошая документация
  • активное коммьюнити (уже на первом проекте мы получали ответы на вопросы от core team и мейнтейнеров бандлов на stackoverflow и в багтрекере на github)
  • поддержка коммерческой организации — Sensio Labs
  • солидное число готовых бандлов и архитектура, рассчитанная на удобное расширение за счет сторонних библиотек
  • готовый инструмент для автоматизации деплоймента в лице Capifony

На тот момент Symfony2 лидировал на github среди PHP проектов по количеству контрибьюторов и звезд. Сейчас лидирует Laravel, построенный на отдельных компонентах Symfony2.

Начинать было легко и приятно, и любопытно. Хоть и без сложностей тоже не обошлось.

What can go wrong

Несмотря на то, что мы работаем с Symfony2 давно, и даже во многом благодаря этому, мы были свидетелями и отлично прочувствовали все недостатки фреймворка и не самые лучшие качества. Справедливости ради, их все-таки немного.

У фреймворка действительно высокий порог входа для новичков и суровая кривая обучения. Это усложняет поиск готовых специалистов. Для выращивания своих приходится выделять больше времени. У этого момента есть и плюсы. В среднем, если программист освоил фреймворк, то с большой вероятностью его компетентность выше остальных.

На начальном этапе своего развития, еще до появления официального roadmap и процесса релизов, фреймворк развивался и изменялся с дикими темпами. Окружающие бандлы часто не успевали следом, поэтому страдала стабильность некоторых решений (привет, Sonata Admin!), это отнимало время. Composer на первых порах тоже не отличался удобством и стабильностью, с этим приходилось бороться. К счастью, на текущий момент все намного лучше. Roadmap позволяет разработчикам бандлов планировать свои релизы, composer превратился в незаменимый инструмент.

Важный момент: Symfony2 инструмент не для любого проекта. Например, нет никакого смысла делать на нем небольшие сайты или API, для них он тяжеловат. В таких ситуациях мы чаще всего используем Silex.

Как и любой другой инструмент, Symfony2 можно использовать по-разному. Иногда это приводило к тому, что мы получали на доработку или поддержку проекты в не самом удобоворимом состоянии. Решения разработчиков шли в разрез с рекомендациями, пестрили ненужными велосипедами и костылями. Причиной этому могли служить либо лень разработчиков, либо нехватка времени на изучение правильных решений. А изучать нужно, так как фреймворк при всей его красоте местами действительно сложен.

Последний момент: обилие сопровождающих технологий и библиотек. Чтобы эффективно работать с Symfony2, нужно знать как минимум Doctrine, Twig, SwiftMailer, Composer и основные бандлы. Хорошо, что основная нужная документация все-таки сосредоточена на главном сайте symfony.com.

What now

На данный момент через нас прошел уже не один десяток проектов на Symfony2, мы знаем его, если не идеально, то очень хорошо. И умеем передавать этот опыт как новым коллегам, так и клиентам или слушателям конференций.

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

Эта статья является частью Evercode Lab Advent 2014 — цикла из 24 статей о том, как появилась, устроена и работает компания Evercode Lab. Полный список статей можно посмотреть в анонсе Evercode Lab Advent.

Evercode Lab

Close