- PVSM.RU - https://www.pvsm.ru -
За последний год я очень много говорил о Symfony 3.0 на разных конференциях. Я думал о наилучшей стратегии для этой версии уже давно, и теперь настало время поделиться моими мыслями со всеми.
Некоторые разработчики и большинство менеджеров проектов боятся обновлений мажорных версий используемых ими проектов с открытым исходным кодом. Наверное, это из-за того, что мажорные версии ассоциируются с потерей обратной совместимости. Возникает много вопросов: принесут ли изменения пользу моему проекту? Достаточно ли ясны планы разработчиков, чтобы был смысл обновляться? Будет ли обновление легким? Что, если я не могу или не хочу обновляться? И так далее.
Страх перед мажорными версиями растет своими корнями из нашего прошлого: вспомните Perl 6 или PHP 6. В мире Symfony вторая версия тоже была революционной по сравнению с symfony 1. Я понимаю, почему люди нервничают, когда слышат о третьей версии, и именно в этом посте я расскажу, почему вам не нужно паниковать.
Во-первых, все знают, что обновления как мажорных, так и минорных версий должны происходить регулярно. Мы должны иметь возможность ломать обратную совместимость, чтобы удалять неактульный функционал, исправлять ошибки архитектуры и учитывать изменения в экосистеме, такие как новые возможности PHP, новые методологии разработки, новые парадигмы веба. Интернет-среда очень быстро эволюционирует, и если мы не будем адаптировать к ней Symfony, она станет неактуальна намного быстрее, чем вам кажется.
Как менеджер проекта Symfony я отвечаю за то, чтобы код был максимально стабильным как можно дольше. Но стабильность — это не статус-кво: мы добавляем возможности и исправляем архитектурные недочеты и в минорных релизах, как вы могли заметить на примере версий 2.4 [1], 2.5 [2] и 2.6 [3]. Все эти версии добавляли функционал в фреймворк, и каждая из них была заметным шагом вперед для самого фреймворка. Но обновляться было просто из-за того, что сохранялась обратная совместимость [4]. Проблема — в сохранении обратной совместимости для устаревших или неактуальных фич (и я даже не говорю о производительности!). Для Symfony 2 это было достаточно просто, потому что она построена на крепкой базе из независимых компонентов. По определению семантического версионирования [5], новая мажорная версия — это просто очередной шаг, на котором мы можем подчистить код и избавиться от хлама.
Что такое Symfony 3.0?
Поскольку новые фичи постоянно добавляются в минорных версиях, а устаревшие помечаются как таковые, вы можете начать улучшать совместимость вашего кода с Symfony 3.0 уже сегодня. Прочитайте руководство по обновлению [6] и выполните предлагаемые изменения, это позволит вам заранее подготовиться к миграции.
Как вы, наверное, уже догадались, в Symfony 3.0 не будет кардинально меняться низкоуровневая архитектура, и релиз не будет революционным. Вот примеры некоторых изменений в Symfony 2.x, которые сделают 3.0 еще лучше:
Избежать паники по поводу новых мажорных версий можно, если сообщать о своих намерениях как можно раньше. Вот именно поэтому сообщество Symfony так тщательно задокументировало нашу стратегию, от обещаний обратной совместимости до roadmap'a и релизов с расширенной поддержкой.
Один из способов минимизировать страх перед новыми версиями — это сделать их предсказуемыми. Согласно нашему графику релизов, Symfony 2.7, которая должна выйти в мае 2015, будет следующим релизом с длительной поддержкой, которая продлится до мая 2018 года по багфиксам и до мая 2019 года по обновлениям безопасности. Вместо того, чтобы планировать следом 2.8, я предлагаю перескочить прямо к 3.0. Так что 3.0 будет выпущена в ноябре 2015 года, и первым релизом с расширенной поддержкой в ветке 3.x будет 3.3, которая выйдет в мае 2017.
Интерактивный график релизов [7] также был обновлен с учетом ветки 3.0.
Что вам делать? Согласно главе документации о процессе релизов [8], есть две стратегии обновления:
Режим двойной поддержки был придуман, чтобы сделать каждого пользователя Symfony счастливым. Для тех, кто хочет работать с самым свежим и крутым, есть стандартная версия, которая выходит раз в полгода, и два месяца выделяются на обновление. Для тех, кому нужна стабильность, есть версия с расширенной поддержкой: новая версия выходит каждые два года, и год дается на обновление.
Чтобы всем было проще помогать разработке Symfony 3.0 уже сейчас, master-ветка главного репозитория теперь отводится под 3.0, а для 2.6 и 2.7 мы создали отдельные ветки.
Если ваш проект использует master-ветку Symfony, чтобы следить за развитием 2.x, переключитесь на 2.7 сегодня.
Стратегия слияния изменений будет почти такой же, как сейчас, за исключением некоторых изменений:
Наконец, что с минимальной версией PHP? Несколько дней назад я проводил опрос на эту тему, и результаты таковы:

На основании этих результатов я предлагаю сделать PHP 5.5 минимальной поддерживаемой версией для Symfony 3.0. Я хочу сохранить возможность поднять это требование до PHP 5.6 где-то в следующем году, но точная дата будет зависеть от наших потребностей и поддержки новой версии хостерами и дистрибутивами ОС.
Есть много простых изменений, которые можно реализовать в Symfony 3.0 уже сегодня. В первую очередь в ветке 2.7 все устаревшие возможности должны сообщать о себе в лог. В master-ветке эти возможности должны быть удалены. И наконец, руководство по обновлению должно быть протестировано и доработано так, чтобы обновляться было легко и просто. Также вы можете посмотреть на тикеты, протегированные как 3.0 на Гитхабе [9].
Хорошего вам кода!
Автор: kix
Источник [10]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/74173
Ссылки в тексте:
[1] 2.4: http://symfony.com/blog/symfony-2-4-0-released
[2] 2.5: http://symfony.com/blog/symfony-2-5-0-beta-1-released
[3] 2.6: http://symfony.com/blog/symfony-2-6-0-beta1-released
[4] сохранялась обратная совместимость: http://symfony.com/bc
[5] семантического версионирования: http://semver.org/
[6] руководство по обновлению: https://github.com/symfony/symfony/blob/master/UPGRADE-3.0.md
[7] Интерактивный график релизов: http://symfony.com/roadmap
[8] главе документации о процессе релизов: http://symfony.com/releases
[9] протегированные как 3.0 на Гитхабе: https://github.com/symfony/symfony/issues?q=is%3Aopen+is%3Aissue+milestone%3A3.0
[10] Источник: http://habrahabr.ru/post/242915/
Нажмите здесь для печати.