Граков Алексей Antalika.com. Этот доклад был прочитан на конференции Байнет 2.2 Beta. Минск, 11-12 сентября 2008. официальный сайт: www.bynet2.org.

Презентация:



Advertisements
Похожие презентации
Java Server Pages(JSP). JavaServer Pages (JSP) позволяют вам отделить динамическую часть ваших страниц от статического HTML. Вы, как обычно, пишете обычный.
Advertisements

Реализовать web интерфейс системы, обеспечивающей: добавление проектов; добавление тестов в проект; запуск теста и визуализация результата; просмотр ранее.
© 2006 IBM Corporation Made available under the EPL v WebSphere Services Technical Conference world class skill building and technical enablement.
Игорь Бровченко Киев, 16 мая 2009 Интернационализация и локализация в Symfony.
Практика распределенной разработки в Open-Source проектах. Александр Веремьев (Zend Framework core team)
PHP&Flex - новая альтернатива для создания RIAs Иванников Андрей Улич Дмитрий.
Drupal.= Яндекс.Сервер; DrupalConf. Москва
Сергей Байдачный Специалист по разработке ПО Майкрософт Украина
Многоязычные сайты на Symfony. Проблемы и их решения Igor Brovchenko
Date: File:GRAPH_04e.1 SIMATIC S7 Siemens AG All rights reserved. SITRAIN Training for Automation and Drives Debug and Start-Up.
© 2005 Cisco Systems, Inc. All rights reserved. IPTX v Configuring Additional Cisco CallManager Express Features Configuring Cisco CallManager Express.
WinCC Работа и мониторинг Siemens AG All rights reserved.© TC Nbg.-M Date: File: E02OFFe.PPT Catalog: NWINCC Открытость и способность.
Разработка веб- приложений с помощью ASP.NET Dynamic Data и ASP.NET Dynamic Data MVC Александр Краковецкий The Frayman Group Microsoft Regional Director.
Work with server by XMLRPC – library in Java For students Author: Dudnik Oxana.
© 2005, Cisco Systems, Inc. All rights reserved. IPS v Lesson 4 Using IPS Device Manager.
Разработчици Кемпински Хотел Зографски София. Разработчици 28 Юни 2012 г.2 Веселин Георгиев, SharePoint &.NET Developer Мартин Караиванов, SharePoint.
© 2007 Cisco Systems, Inc. All rights reserved.SNRS v Adaptive Threat Defense Configuring Cisco IOS Firewall Authentication Proxy.
Microsoft TechDays Никоноров Евгений Ведущий разработчик EPAM Systems.
BIRT: The Eclipse Reporting Framework Jason Weathersby, BIRT PMC.
Open Source PHP5 Zend Framework MySQL Architecture Core vs. Community and Local modules OOP and Patterns Модульность Core API Гибкость дизайна.
Транксрипт:

Граков Алексей Antalika.com

Этот доклад был прочитан на конференции Байнет 2.2 Beta. Минск, сентября официальный сайт:

Обычная разработка Cms 1 Cms 2 Super CMS Лучшая в мире CMS, потому, что я написал ее сам! Зачем что-то еще?

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

Преимущества фреймворков Один зверь, вместо зоопарка Ускорение сроков разработки Меньше внимания на мелочи, больше на бизнес логику Больший контроль над процессом и качеством разработки Хорошая документированность Быстрый ввод новичков на проект

Php-фреймворки: codeIgniter cakePHP Symfony Zend Framework

Цитируемость фреймворков в поисковиках ПоисковикCakePhpSymfonyCodeIgniter Zend Framework Google (world) 3,680,0001,440,000544,0003,280,000 Google EN3,250,000497,000361,0002,040,000 Google.ru ,50036,900 Yandex90, 00068, 00087, , 000

Cake PHP

CakePHP::Возможности Совместим с PHP4 и PHP5 MVC Своя файловая структура Своя абстракция данных (либо Adodb, PEAR::Db) Поддержка плагинов Валидация Scaffolding Маршрутизация запросов Компоненты / Хелперы / i18n

CakePHP::Обработка запросов

CakePHP::Соглашения Класс KissesAndHugsController должен храниться в файле kisses_and_hugs_controller.php Название модели записывается в ед. числе: Book, MyBook, и т.п. Названия таблиц должны быть в множественном числе, и через подчеркивание: my_year_books Названия множественном числе. BooksController, OxenController.

CakePHP::Контроллеры index – метод по умолчанию ( site.com/books/ ) Методы контроллера beforeFilter – до логики beforeRender – до view afterFilter – после логики и после view

CakePHP::Модели Доступные методы в каждой модели: beforeFind() afterFind() beforeValidate() beforeSave() afterSave() beforeDelete() afterDelete()

CakePHP::Шаблоны Чистый PHP Smarty Место нахождения шаблона: /app/views/people/index.tpl

CakePHP::Проекты Fileshifter.com Server: Pentium 3, 733mhz, 512MB RAM, 2TB SATA RAID. OS: Fedora Linux, ext3 filesystem. Объем данных на сервере: 1.37 TB. Ежедневный траффик: 28 GB в среднем. Время отклика: сек

Code Igniter

CodeIgniter Текущая версия Гибкость Плагины / Хелперы Скаффолдинг Простота (loose coupling) MVC Поддержка PHP4 Настройка параметров автозагрузки

CI::Ход работы приложения

CodeIgniter::модели Классы моделей хранятся в папке application/models/ Класс: Model_name Имя файла: application/models/user_model.php Загрузка: $this->load->model('Model_name'); $this->Model_name->function();

CodeIgniter::Контроллеры application/config/routes.php – маршруты $route['default_controller'] = XXX_controller'; class My_class extends Controller { …. } _remap ()

CodeIgniter::View class Privet extends Controller { …. } Загрузка: $this->load->view('name');

Symfony

Symfony::использует Creole – абстракция с БД Propel ( PDO с 1.2) Prado для i18n Spyc YAML парсинг Pake для командной строки(symfony 1.0) Prototype, Script.aculo.us, Dynarch.com, TinyMCE

Symfony::возможности I18n, l10n, cache, валидация и т.п. Scaffolding Генерация кода AdminGenerator Независимые блоки (Loose coupling) Маршрутизация Хелперы Debug

Symfony::особенности Все классы начинаются с sf (стандартные) class ##MODULE_NAME##Actions extends sfActions Много различного рода конфигурационных файлов.

Symfony::Известные проекты bookmarks.yahoo.com (20 млн пользователей) (сайт обмена играми) (сайт знакомств) (доска объявлений)

Zend Framework (ZF) Acl (роли и ресурсы) Auth (openId, Microsoft InfoCard) Cache / Loader Config / Console_Getopt (cli) Date ( i18n, l10N) / Db Filter, Validate (34) / Gdata (Zend Google Data Client) Http_Client / Json / Locale, Log, Mail, Mime, Registry Rest_Client / Rest_Server Service: Akismet, Amazon, Delicious, Flickr, Nirvanix, Simpy, StrikeIron и Yahoo! / XmlRpc

Новое в ZF 1.6 RC1 Интеграция с Dojo Поддержка с SOAP Unit-тесты для контроллеров Поддержка индексных файлов Lucene 2.3 Zend_Session – обработчик сохранения Paginator Zend_Config_Xml – поддержка атрибутов Медиа хелперы (QuickTime, Flash)

ZF в цифрах Более 7 миллионов загрузок Более 500 разработчиков Более 1000 страниц в справочнике Более 500 примеров Более 60 проектов на SourceForge Более 30 проектов на Google Code Около 70 различных компонентов.

ZF::соглашения Class My_Class_Name должен находится в файле: My/Class/Name.php Cтиль кода во многом совпадает со стилями PEAR

ZF::Front Controller Pattern

Zend_Controller_Front Zend_Controller_Roulter_Rewrite (выбирает action для запуска) Zend_Controller_Dispatcher_Standard (вызыает action) Zend_Controller_Action (конкретный) Using Zend_Action_Helper Zend_Controller_Request Zend_View (использует Zend_View_Helper) Zend_Db_Table (Model ) Т.е. тут может быть Custom Model Zend_Controller_Response_Http

ZF::Модели Zend_Db_Table PDO $db = Zend_Db::factory($cfgDb->type, $params); Zend_Db_Table::setDefaultAapter($db); Zend_Registry::set("DB", $db);

ZF::Контроллеры Zend_Controller_Action ErrorHandler plugin ViewRenderer action helper plugin preDispatch postDispatch Init

ZF::View interface Zend_View_Interface public function render($name); public function assign($name); Zend_View_Abstract basePath, filters, helpers, _setHelperClass (filter) Zend/Controller/Action/Helper/ViewRenderer.php MyClass_View_Smarty extends Zend_View_Abstract

ZF::Проекты – движок для e- commerce, 0.5млн скачиваний, 30K users, 70 партнеров, 60+ языков, 150+ расширений (no java!) RightMedia – online реклама (NY) 4-5млрд показов в день, 100K запросов/с, 19K рекламодателей и партнеров (5 dev-6m) QEDWiki – IBM (mashups) PokerRoom.com – 12млн users (25 srv, 16front, 9mysql, i18n, docs, routes:{playpoker, pokerSpielen}: (seo), ZP+JavaBridge

Производительность Почти Hello World test ;-)

Обычная страница без ORM Ыф Вид теста: ab –n 1000 –c XXX 512 ram, Intel Pentium 14oo MHz, Windows XP cakePhp Zend CodeIgniter

Вместе с ORM, без кеша. Ыф 512Mb RAM 1.8Ghz AMD Sempron под Ubuntu Gutsy (7.10) cakePhp Zend CodeIgniter

Ыф 512Mb RAM 1.8Ghz AMD Sempron под Ubuntu Gutsy (7.10) Вместе с ORM, APC кэшем Ыф cakePhp 7.3 Zend CodeIgniter

Symfony performance

Проект на Zend Framework

ZF::Пример проекта. Создаем сайт-сообщество. Несколько языков, несколько доменов, различные уровни доступа к ресурсам, маршрутизация, ORM.

Организация разработки Zend Studio for Eclipse (или просто phpEclipse) Cruise Control + phpUnderControl PHPUnit (Себастьян Бергман) Smarty SVN Ajax: xajax/jQuery/Dojo/Prototype/и т.д. Firebug + FirePhp (FireZend) ORM (Doctrine) Memcached

Zend_Config site.ru.xml site.eu.xml site.zone.xml en ru

bootstrap.php initView(); initRoutes(); initFrontend();

$view = new Socnet_View_Smarty(); $vRender = new Zend_Controller_Action_Helper_ViewRenderer($view); $vRender->setViewBasePathSpec( dirname(__FILE__).'/V/smarty/templates') ->setViewScriptPathSpec(':module/:controller/:action.:suffix') ->setViewScriptPathNoControllerSpec(':action.:suffix') ->setViewSuffix('tpl'); Zend_Controller_Action_HelperBroker::addHelper($vRender);

Auth: $authAdapter = new Zend_Auth_Adapter_DbTable( $db, 'user', 'login', 'pass'); Zend_Registry::set("Auth", $authAdapter); Class myAdapter extends Zend_Auth_Adapter_Interface public function authenticate();

ACL $roleAdmin = new Zend_Acl_Role(Socnet_Auth_Acl::ADMIN); $this->addRole($roleAdmin, $roleMember); $this->addResource('forum/topic'); $this->deny(null, null); // Запрет всем для всего. $this->allow(null, 'forum'); // всем доступ к форуму $this->allow(null, 'ajax'); // всем к ajax $this->allow($admin, admin');

Маршрутизация $route = new Zend_Controller_Router_Route(ajax/:widgetNam e/:widgetAction', array( 'controller' => ajax', 'action' => 'index', 'widgetName' => '', 'widgetAction' => 'index' )); $router->addRoute('widget_request', $route);

Unit-тестирование /tests Auth Controller Domain Model Members AllTests.php setUpEnvinronment.php

Модели /generated |- BaseModelName ParticularModel extends BaseModelName phpDoctrine.yml fixtures

if (extension_loaded('memcache')) { $frontendOptions = array( 'lifetime' => 7200, // cache lifetime of 2 hours 'automatic_serialization' => true ); $backendOptions = array(); $frontend = 'Core'; $backend = 'Memcached'; } else { $frontendOptions = array( 'lifetime' => 7200, // cache lifetime of 2 hours 'automatic_serialization' => true ); $backendOptions = array( 'cache_dir' => dirname(__FILE__).'/../tmp/' // ); $frontend = 'Core'; $backend = 'File'; } $cache = Zend_Cache::factory($frontend, $backend, $frontendOptions, $backendOptions); Zend_Registry::set('cache', $cache);

Диспетчеризация extends Zend_Controller_Dispatcher_Standard $action = $this->getActionMethod($request); $doCall = !method_exists($controller, $action); $request->setDispatched(true); $controller->preDispatch(); $xajaxargs = $controller->_page->Xajax->getRequestParams(); $sResponse = call_user_func_array(array(&$controller, $action),$xajaxargs); if (is_a($sResponse, "xajaxResponse")) { $sResponse = $sResponse->getXML(); } header($sContentHeader);

motofriends.ru

Выводы:

Полезные ссылки Cakephp.org (cake-php.ru) – сайт фреймворка Cakeforge.com – набор готовых проектов на cake codeigniter.com (code-igniter.ru) – сайт фреймворка symfony-project.org - сайт фреймворка Framework.zend.com - сайт фреймворка Zendframework.ru - русский сайт + wiki (новый) (Интеграция Zend_Acl и MVC. Часть 1) (Интеграция Zend and Doctrine) (откуда инклюды) (Prepared statements in mysql) (Сравнение скорости PDO, ADOdb, MDB2, Zend_Db, и т.п.) (Сравнительный тест систем кэширования user data для PHP) (оптимизация Загрузки в 22 раза - Котеров) (обзорно про ZF) (Роутеры в Zend) (Zend_Tool – для создания рабочей копии проекта (еще одно сравнение фреймворков) (CI vs Cake) (Довольно хорошие сравнительные тесты)

(архитектура Zenda) (слои в архитектуре) (Zend Platform – aka Php Application Server – стоит почитать) (много интересных статей) (сравнение CodeIgniter с Cake) (матрица JS-фреймворков) (Symfony: 1st project ) (обзор производительности) (1-й проект на cake)

Есть вопросы? Icq: Skype: horal777 Алексей Граков