суббота, 6 марта 2010 г.

Философия Symfony 2

Это перевод поста в блоге Symfony.
Только в том случае, если вы вчера спустились с гор, вы не слышали ничего о Symfony 2. Всех остальных так или иначе задела шумиха в твиттере и различных блогах. На самом деле, я сегодня не буду говорить ничего о каких-то фичах новой Symfony. Если вы хотите какой-то конкретики, посмотрите Quick Tour на сайте Symfony Reloaded. Данный пост скорее о философии, которой придерживается Symfony 2. Надеюсь, что после прочтения вам станут понятны многие наши решения относительно новой версии фреймворка.

Symfony 2 - это улучшенная архитектура. Старые классы, доставшиеся по наследству от Mojavi, ушли в небытие. Их место заняло чрезвычайно гибкое ядро. Это позволяет строить с помощью Symfony как сайты-визитки, так и порталы, настолько крупные, насколько того требует задача. Решение об изменении архитектуры позволило нам учесть ошибки, допущенные в предыдущем поколении фреймворка, а также внять всем пожеланиям, собранным за 4 года.

Symfony 2 останется самодостаточным фреймворком, но с несколько иной философией. Вы знаете, как мы не любим изобретать велосипеды, и уже в symfony 1 мы использовали множество разработок третьих лиц — Propel, Doctrine, SwiftMailer и т.д. В Symfony 2 мы поднимаем эту мысль на новый уровень. Сосредотачиваясь на разработке низкоуровневого ядра, мы стараемся использовать сторонние продукты везде, где только возможно.

Первое, что бросается в глаза - логгер и кэш-подсистема теперь используют библиотеки Zend Framework. Мы долгие годы разрабатывали и поддерживали собственные подсистемы, но сейчас мы постарались понять, что же лучше для проекта в долгосрочной перспективе. Не учитывая личные интересы. (курсив переводчика)

Но, конечно же, мы не должны и не будем использовать какие-то библиотеки просто потому что они существуют. Пять лет назад я решил создать собственную библиотеку юнит-тестирования lime, отказавшись от использования существовавших тогда SimpleTest и PHPUnit. И у меня были на то причины: в противовес этим монстрам я хотел сделать нечто простое, что позволило бы понизить барьер для начала тестирования. Но с того времени многое поменялось. PHPUnit стал библиотекой для тестирования PHP де-факто, и разработчикам больше нравится работать с цельной концепцией тестирования. Вобщем, было решено использовать PHPUnit в качестве подсистемы тестирования в Symfony 2.

Я полностью согласен с тем, что Paul Lomax написал об этом в твиттере: "Используй то, что есть под рукой. Осознай, что это полный отстой. Напиши свое. Подожди, пока кто-то выпустит меньший отстой. Забрось свое. Используй чужое."

Используя PHPUnit вместо lime, мы снижаем нагрузку на своих разработчиков: им придется поддерживать меньше кода. Это как бы взять себе в команду дополнительно Себастьяна Бергманна - крутого PHP-разработчика, который помогает нам сделать Symfony еще лучше. Помимо этого, использование PHPUnit дает еще несколько бонусов:
  • Мы сможем плотнее интегрироваться с другими разработками - Doctrine, Propel, Zend Framework,...
  • Появляется возможность плотнее интегрироваться со средой разработки: IDE, системами непрерывного тестирования и т.п.
  • Появляется куча новых фич, которых нет в lime
  • Вам нужно будет меньше учиться вещам, специфичным для Symfony
Бернард продолжит работу над Lime 2, но при этом у него будет достаточно времени для работы над основным проектом Symfony, в частности, новым суб-фреймворком форм.

Использование сторонних разработок - это круто, но только в том случае, если их можно подцепить к ядру плотно (cohesive) и прозрачно (transparent). В игру вступает Dependency Injection Container. Вообще, вся Symfony 2 навешана на Dependency Injection Container. Кроме гибкости, которую эта штуковина дает разработчику, это еще и отличный инструмент подцепления сторонних разработок. Если вам интересна эта тема, посмотрите на плагин DoctrineBundle или SwiftMailer, и вы поймете, почему я так восторгаюсь.

И да, не забывайте, что Symfony 2 еще не готова. Мы опубликовали релиз, чтобы получить обратную реакцию на ранних стадиях разработки. Пожалуйста, если вы не равнодушны к развитию фреймворка, попробуйте альфа-версию на вкус, и напишите нам. Чем больше, тем лучше.


От автора перевода: Symfony 2 - это Dependency Injection Core, не более, и не менее. Удобный клей, которым вы склеиваете ORM, Mailer, кэширование, логгер, шаблонизатор, формы и т.д. Еще более продуманный, чем 1.x, еще более удобный, еще более гибкий. Но не размывается ли тем самым понятие фреймворка? Ведь фреймворк - это набор правил, набор инструментов, набор концепций, которые позволяют строить приложение быстро, дешево и качественно. Если очень сильно гиперболизировать тренд, который избрала команда Symfony, то в итоге должен получиться продукт, не содержащий ни единой строчки кода, а всего лишь лаконичный документ о том, как подружить вместе Doctrine, PHPUnit и Zend_Forms.

Комментариев нет:

Отправить комментарий