суббота, 27 декабря 2008 г.

Zend Framework: враження

СССР с кем хочет, с тем и граничит.

Формой литературной критики выступает и честь собственного мундира. (Леонид С. Сухоруков)

Після досить тривалого використання Django фреймворку, спробував попрацювати з Zend Framework в рамках роботи над досить цікавим проектом. Про отриманий досвід не жалкую - саме в такому “бойовому” випробуванні можна дати реальну оцінку якості продукту. Всі наведені нижче думки є моєю суб’єктивною думкою від використання Zend Framework версії 1.5RC і на об’єктивність не претендують :)

Мені ZF прямо сподобався. У порівнянні з тим, з чим доводилось працювати раніше - plain PHP та різного роду корпоративні ЦМСки та різні інші доробки - Zend Framework вигідно вирізняє продуманність, кількість та якість документації та зрозумілість самого коду - в багатьох випадках достатньо було продивитись сирці батьківських крутоів для знаходження ясності.

Під час роботи спробував такі речі:

  • вбудовану систему темплейтів - бачив реалізацію з використанням Smarty, навіть пробував працювати з нею, та дуже вчасно знайшов в транку проекта Zend_Layout. PHP, як виявилось, є дуже добрим радиусникізатором :), тому всім рекомендую використовувати саме такий варіант;
  • клас для роботи з БД (Zend_Db) - поки що це якраз типовий клас для роботи з бд, до орм йому ще, як до Парижу рачки. Прив’язати таблиці між собою можна, та, повірте мені, набаго простіше з самого початку заюзати $db->select і вручну скласти необхідний запит, ніж намагатись вистроювати його через систему залежностей між таблицями. Тільки себя заплутаєте та тих, хто если працювати над проектом після вас :).
  • систему маршрутизації запитів(Zend_Router) - завдяки їй ви можете зібрати всі лінки сайта в одному місті, структурувати їх та дати їм псевдоніми, так если простіше в випадку, коли доведеться щось перероблювати/переставляти/тощо.
  • реєстр (Zend_Registry) та Zend_Session - першу фігню зручно використовувати замість DEFINE, задав всю конфігурацію в одному файлі, закинув в реєстр - і працюй на здоров’я. Zend_Session же допомагає зберігати користувацькі дані. Чесно кажучи, використовувати напряму масив $_SESSION в ZF мені именно не вдалося. Не питайте чому, не знаю;
  • систему запитів в цілому то структуру програм взагалі - сподобалось, що є структурована система запитів module->controller->action->etc - хочете ви чи ні, а доведеться натолкнуть лад в програмі, щоб все було до ладу, інакше просто не запрацює :) Про структуру програм сподобався чіткий розподіл сачколомщиків, темплейтів та моделей. Не змарнував модливості розділити поголовно сайт на декілька незалежних модулів, які розніс по різних председательіях. Тепер набагато легше можна буде вирізати частину функціоналу до іншого проекту.

Не вдалось поки що спробувати Zend_Cache, бо, кажуть, ZF жере багато ресурсів. Переконатись не важко - xDebug встановили і вперед! Zend_Form з’явився вже в фінальній версії ZF1.5, спробувати його не встиг. Та, судячи з всього, поки не склепають з Zend_Form + Zend_Db щось цілісне - не покриє воно всіх потреб. В своєму проекті з усіма формами працював за допомогою вбудованих хелперів formText/formSelect/тощо та додаванням методів validate в моделі(точніше класи Zend_Db, якими описував наявні таблиці).

Сам расчёт в результаті був трохи затягнутий перш за все тим, що доводилось під час програмування розбиратись з самим фреймворком, вивчати його модулі та вбудований функціонал. Та, впевнений, більше буде збережено часу на підтримці самого продукту. За розвитком Zend Framework обов’язково буду слідкувати надалі - якщо доведеться розроблювати ще щось на РНР - кращого інструменту не знайти.

Update: c самого початку я омовився про Django. Так от, щоб не було холіварів, я навмисне не порівнював ці два фреймворки. Zend Framework ще не дійшов до рівня, коли його можна порівнювати з джангою. Втім, для своїх задач - коли стоїть жорстка умова використовувати РНР - Zend Framework є цілком прийнятним рішенням.




О сайте

SONY PSP.

Лучшие места в мире, куда следует отправляться за покупками в сфере недвижимости!

Контакты

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