Сегодня 13 июля, воскресенье ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7281
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
RMCreative.ru - Блог
RMCreative.ru - Блог
Голосов: 1
Адрес блога: http://rmcreative.ru/feed/
Добавлен: 2008-06-12 21:34:00 блограйдером ZaiSL
 

Laravel

2012-06-05 13:45:37 (читать в оригинале)

Как разработчику Yii, мне полезно знать, что происходит вокруг. Пару недель назад посмотрел фреймворк Laravel. О нём уже пытались написать на хабре. Было это в мае, но из песочницы пост не выбрался. Со второй попытки вроде получилось. Сообщество активно комментирует.

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

Сам фреймворк молодой, ему примерно год. Развивается очень бурно. Уже были выпущены три версии. Последняя получила волну хороших отзывов от приверженцев CodeIgniter. Настораживают слухи о его рекламе по телевидению, что для фреймворка, а тем более, для очень молодого фреймворка странно и необычно.

Итак, интересные для меня штуки:

Приложение по умолчанию вынесено за вебрут

Решение хорошее. Так безопасней. В Yii 1.1 приложение внутри вебрута потому как на старте Yii разворачивали его на всяких Dreamhost, на которых по-другому не запускалось. К Yii 2 планируется предоставлять несколько вариантов скелета приложения под разные размеры и окружения.

Решение для конфигурации под несколько окружений

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

IoC контейнер

Контейнер — популярная нынче штука. Самое забавное, что понимают, что это такое, для чего нужно и как использовать очень немногие. Чаще всего у разработчика просто взрывает мозг и, либо он отказывается от этой штуки, либо слепо (и часто неправильно) его использует. По-моему, лучшим решением является тихое использование контейнера в ядре без заострения на нём особого внимания. Кому нужно — найдут.

Документация

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

Часто хвалят сами себя :)

Статические классы

В Laravel их много. Очень много. Идея очень похожа на хелперы из CodeIgniter и на CHtml из Yii. В общем-то, учитывая LSB, это не такая страшная проблема. Хороший момент, что функционал довольно чётко поделен между этими классами.

Самое интересное в этой части, возможность расширять функционал этих классов:

HTML::macro('my_element', function()
{
    return '<article type="awesome">';
});
 
echo HTML::my_element();

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

Bundles

Система пакетов — штука замечательная. Позволяет упорядочить множество расширений, которые пишут пользователи. Для Laravel, на данный момент, большинство расширений — обёртки популярных классов. То, что используются bundles — хорошо. То, что для них сделан велосипед — не очень, ведь в скором времени Composer вытеснит остальных из это ниши (я на это очень надеюсь).

Консоль

Реализация не лучше и не хуже остальных. Понравилось, что используется выделение цветом, как в Symfony 2.

События

Используются по полной. Глобальны, не привязаны к объектам. С одной стороны это позволяет писать довольно гибкий код, с другой — можно с этой гибкостью и не совладать, если пользоваться неправильно.

В Yii2 будет нечто среднее между декларативным способом Yii 1 и абсолютно свободным из Laravel.

ORM

Нижний слой работы с БД довольно обычный, похож на Yii. Также используется PDO, примерно такой же построитель запросов. Вот ORM у Laravel интересный. Из хорошего можно назвать:

  • dirty attributes для моделей (это когда модель сохраняется только в случае, если изменились её атрибуты). Будет в Yii2.
  • Очень интересный способ описания отношений. Понравился. Сами отношения классические. Такие, какими они были во времена становления Rails и Prado.
  • Поддержка сохранения связанных объектов. За счёт использования dirty attributes, реализация довольно простая и эффективная. Yii2 будет уметь сохранять связанные записи, правда, чуть по-другому.
  • В общем, API этой части хорош.

Из нехорошего:

  • Не используются метаданные.
  • Нет валидации в том виде, что есть в Yii.
  • Модели безсхемные. Можно записать в модель Post, например, что-то вроде dateOfFirstPost. До сохранения мы не узнаем, что такого атрибута у нас нет. Ошибку получим уже после попытки выполнения SQL в том виде, в котором её отдаёт СУБД.
  • Массовое присвоение включено по умолчанию. В условиях отсутствующей валидации в моделях и их безсхемности, штука для безопасности приложения фатальная. GitHub уже поплатился за такое-же решение в RoR. Самое забавное, что решение проблемы, которое попало в master — добавление возможности отключить массовое присвоение. В RoR так было с самого начала и это, как показала практика, не спасло программистов GitHub от ошибки.
  • Жадная загрузка с условием. Штука мощная, но слишком сложная для реального использования. Код получается запутанным.

Роутинг

Вместо контроллеров возможно использовать анонимные функции. Модно, но бесполезно. Из-за этой штуки привычные настройки контроллера смещены в роуты: фильтры, авторизация и др.

Очень странное решение с вложенными контроллерами. Особого смысла так делать нет. Плюс имена контроллеров в этом случае строго определённые и похожи на Zend Framework 1, при том, что всё остальное именуется в другом стиле.

Пароли

Разработчик отказался поддерживать небезопасные md5 и sha1 в пользу bcrypt. Полностью поддерживаю.

View

Слой выполнен в виде кучи статических классов и хелперов. Хелперы таким образом делать, в общем, оправдано, а вот сам View — сомнительно. Скорее всего, именно эту часть будут расширять под свои нужны, прикручивая Twig или Smarty.

Assets

Похоже на Yii, но не настолько гибко. Для тех, кто пользовался Yii, ничего интересного.

Итоги

В итоге неплохо, но и не замечательно. Переход на Laravel с Yii 1.1 для боевых проектов сомнителен. Для тех, кому нравится CodeIgniter и не нравится Yii — хороший вариант.




 


Самый-самый блог
Блогер ЖЖ все стерпит
ЖЖ все стерпит
по количеству голосов (152) в категории «Истории»


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.