Выбор фреймворка?
===================

 Уважаемое Хабрасообщество,   
  
  
  

Последнее время (несколько лет) я пишу в основном с использованием CodeIgniter. Очень обрадовался, когда началось движение по второй ветке.   
  

В настоящий момент активно проектируется достаточно большой проект (более чем 1 год работы), высоконагруженный, с некоторой спецификой. Планировалось все также делать на Code Igniter. Но тут меня, как громом, осенило, что я что-то делаю не так. Я писал практически по рекомендациям, описанным на сайтах комьюнити CI, поэтому не сразу понял подвох — работа с объектами.   
  
  
  

По сути, CI очень слабо оперирует с ними и нет никакой ORM.   
  
  
  

Встроенный класс Active Records возвращает либо массив, либо объекты — массив, обернутый в StdClass, что совсем не то, что нужно.  
  
  
  

Наследование также очень странно реализуются, хотя этот момент нашел, как обходить.  
  

Не смотря на эти ньюансы, фреймворк зарекомендовал себя достаточно хорошо.  
  
  
  

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

Начал смотреть по сторонам — пока что положил глаз на Yii, но толковых и актуальных обзоров очень мало, в основном много холивара, либо за давностью от 2008-09 годов :(  
  
  
  

Извините за длинный вопрос и излишнее количество философии, пытался объяснить все условия и задачи.  
  
  
  

PS в качестве front-end будет 2 хвоста. Один html, почти не нагруженный. На втором — extJs. 

 Хм, оставайтесь на CodeIgniter раз его так хорошо знаете. А нужен ORM (зачем он вам если проект выско нагруженный???) объектный у вас два пути:  

1. Расширить ваши модели через MY\_Model сделав метод выдачи результата в виде нужного вам объекта, который ведёт себя как Iterator так и ArrayAccess это не сложно.  

  

2. Подключить любой другой ORM от Doctrine, Propel, PHP-ActiveRecord всё это так же просто делается и есть туториалы в сети.  

  

Имхо, перед написанием проекта не стоит начинать метаться в поисках лучшей технологии, надо брать тот инструмент в чем вы спец. 

 Опыт работы:  

Zend Framework 1 — c 2010, но редко  

Kohana — c 2011, часто, проекты маленькой сложности  

YII — с 2011, пока два проекта средней сложности  

Symfony — 2011, с выхода стабильной версии, в марте запущен в продакшн первый релиз долгосрочного проекта  

  

Сейчас, заканчивая проект на symfony2, могу с уверенностью сказать что хоть мне Yii понравился, но возвращаться на него с Symfony2 не буду, я считаю что в ближайшем будущем темп будут задавать именно Symfony2 и Zend Framework 2, ну а остальные будут их догонять.   

  

Отдельные моменты которые мне особенно понравились в sf2:   

 — Связка Symfony2 и Doctrine2, работа с базой данных никогда не доставляла такого удовольствия  

 — Шаблонизатор Twig. Раньше я был приверженцем сторонников высказывания что PHP и сам отличный шаблонизатор, но теперь я понял насколько ошибался  

 — ОЧЕНЬ гибкий и продвинутый генератор форм. К нему прилагается отличная интеграция с Doctrine2, буквально за пару строчек кода можно все сохранить в базу данных с надлежащей валидацией.   

 — Очень гибкая архитектура, благодаря DIC можно поменять ну просто все что угодно. Модульность! Можно отключить что угодно, и подключить что угодно. По сути это набор компонентов, их можно использовать даже по отдельности.   

 — Работает быстро. Меня этот аспект по началу беспокоил, так как не понимал как такая махина может работать быстро, но оказалось что в пакет включены production настройки, которые впечатляюще разгоняют систему. Symfony1 в данном случае и есть причина мнения что Symfony медленный, Symfony2 это совсем другой framework, надежный и быстрый.  

 — PHP 5.3. и скорый переход на PHP 5.4  

 — Исходники модулей и ядро расположено на github. Все разработка идет там. Очень удобно следить за изменениями. Я как пользователь git-а очень одобряют использование именно этой VCS  

 — Дофига модулей (бандлов) от сообщества, это всего за пол года с момента релиза! Простой но удобный package manager который обновляет ядро и модули автоматический.   

 — Хорошая документация  

 — Очень продуманная структуризация проекта  

 — Level up в плане поднятия опыта, много новый решений  

  

Также замечу что, код очень понятный и чистый, вровень с ZF, лучше и понятнее код только у Kohana. Хуже из всех код из четверки с которыми я работал у Yii… ну как, не хуже, просто своеобразный, не совсем по стандартам, я так и не смог привыкнуть к нему.  

  

Что не очень хорошо:  

 — Порог вхождение выше среднего, «чувствовать» систему я начал только через месяц  

 — Документация могла бы быть более подробной, сейчас кстати трудится сообщество над этим 

 Kohana? 

 Kohana хороший фреймворк, но слишком «простой» для больших проектов.  

Yii хорош, т.к. многие вещи уже написаны за вас, оформлено в виде расширений, многие сложные вещи, делаются одной строчкой(правда несколько раз сталкивался с тем, что очень простые вещи одной строчкой не получаются =) ).  

Если проект крупный, то Yii или Symfony2. Кохану крупный проект не рекомендую.  

  

А вообще, раз проект на год и более и вы морально готовы к новому, то это отличный повод глянуть в сторону RoR. 

 обеими лапами за Yii — обзоров про него, может быть, и нет (не искал, признаюсь), но:  

 — много документации  

 — сильное коммьюнити  

 — очень гибок и хорошо продуман  

  

Да и после CodeIgniter, кмк, на Yii будет весьма легко пересесть. 

 Symfony2 + [Doctrine](http://ru.wikipedia.org/wiki/Doctrine) или [Doctrine + CodeIgniter](http://habrahabr.ru/post/41661/)   

Я бы посоветовал остаться именно на то что хорошо знаете, и вообще почитать больше про архитектуру высоко нагруженных приложений, паттерны проектирование, проектирование структур баз данных. Это вам больше поможет чем выбор более простого или сложного фреймворка, вы на любом из них сможете реализовать хорошее приложение. Советую прочитать «Архитектура корпоративных программных приложений» Мартин Фаулер 

 Если планируете юзать extJS то присмотритесь к Yii. Есть готовая либа [www.ext4yii.com/](http://www.ext4yii.com/) которая может облегчить работу с extJS непосредственно из Yii 

 ROR… отличный фреймворк =) 

 Сам люблю и пишу на Кохане, но подумаю о том, чтобы перейти на Yii. 

 1. Поищите в QA, подобных вопросов уже было несколько.  

2. Каждый посоветует свой любимый фреймворк.  

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

 Неужели я первый, кто оставит голос за Zend Framework?  

Мощный, гибкий, с гарантией от производителя. :)  

Большой, да, но это не значит что это его минус. 

 Yii или Symfony2. Если интересно, весьма перспективен еще ZF2 (для изучения), но серьезные проекты на нем делать явно рано. 

 Дальше буду двигаться в стороны Django или RoR, пока не решил. 

 Zend Framework 2 + Doctrine 2