На правах рекламы

Шукалка

Последние достижения в веб-программировании

Понедельник, 15 августа 2011 г.
Рубрика: Бизнес в сети
Метки: |
Просмотров: 2399
Подписаться на комментарии по RSS

Не на все 100% я полюбил CodeIgniter, хотя и применил его в нескольких проектах, над которыми пришлось поработать: 10ak.ru (в прошлом году) и bestobmen.com (закончил этой весной), а так же в нескольких мелких приложениях, вроде публикации данных импортированных из xls-файлов.

Однако, от версии 2.0 я ожидал кардинальных изменеий прежде всего в области расширения модульности (HMVC), но фреймворк не оправдал моих ожиданий. В тоже время мне удалось наконец осилить (прочитать и понять) документацию по Kohana 3.0, поэтому начиная работу над следующим проектом, я решил все-таки попробовать оседлать данный фреймворк.

Сразу замечу, что основным неоспоримым плюсом Kohana является реализация HMVC. Одновременно и плюсом, и минусом можно считать его штатный ORM, т. е. самое его наличие на фоне кодигнайтеровского AR выглядит очень "вкусно", однако очень быстро обнаружились ситуации, когда обычных возможностей кохановского ORM'а начинает не хватать.

Вот, например, ситуация, когда при выборке списка сущностей, данные необходимо группировать:

$subscrbers = ORM::factory('subscriber')
    ->group_by('id');
$subscribers->reset(false);
$count = $subscribers->count_all(); // собака порылась тут
...
$viewdata['subscribers'] = $subscribers->find_all();
$this->template->countent = View::factory('subscribers', $viewdata);

В этом случае метод count_all() вернет не количество сгруппированных записей, а количество записей попавших в первую группу. Ой, как долго я проковырялся с этой проблемой, пока придумал такой вот костыль:

$count = $subscribers->select(DB::Expr('count(*)'))->find_all()->count();

Да, конечно, спасает во многих случаях использование построителя запросов QB, особенно тот факт, что методы построителя можно успешно комбинировать с методами ORM'а.

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

Вобщем, ORM оставляет желать лучшего. При всем при этом развитие Sprig и Jelly, расхваливаемых некоторыми программистами, кажется существенно отстает от развития самого фреймворка.

Думаю, не посмотреть ли в сторону Doctrine или Propel, невзирая на их некоторую монструозность?

И все же в данный момент я пока останавливаю свой выбор на Kohana, по прежнему хочется иметь хорошую CMS, написанную на любимом фреймворке. Увы, пока таких не наблюдается. Поэтому после выбора ORM, может встать вопрос о написании собственной CMS, но времени пока на это нет, к сожалению. Более того, на горизонте видятся еще два довольно интересных фреймворка, с которыми хотелось бы познакомиться - SolarPHP и FuelPHP. Особенно интересен последний, поскольку он позиционирует себя, как фреймворк, вобравший все лучее от Kohana и CodeIgniter.

Остается мечтать, что времени теперь будет чуточку больше.

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

  1. 2011-08-22 в 00:16:50 | Тарлюн Максим

    А не пробовали смотреть в сторону FuelPHP, который по сути является форком от Kohana.

    Не так давно делал обзор у себя в блоге:

    http://tarlyun.com/php/fuelphp_v1_0/

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

Используйте нормальные имена.

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

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

(обязательно)