SlideShare a Scribd company logo
1 of 26
Современные платформы
    (фреймворки) разработки веб-
         приложений на PHP

               Сергей Шимко
Разработчик Magento Community и Enterprise Editions
Современные платформы (фреймворки)
    разработки веб-приложений на PHP
                  Структура доклада
I. Введение                   IV. Многопользовательские
    • Требования к                 приложения,
      платформам разработки        разграничение прав
    • Преобладание            V. События в веб-
      парадигмы OOP и
      паттерна MVC                 приложениях (принцип
                                   publish/subscribe)
II. Интернационализация,
     локализация              VI. Производительность,
                                   кэширование
III. Роутинг/формирование
     URL                      VII. Заключение
I. Введение
                  Основные тезисы

• Долгое время разработка веб-сайтов велась без
  использования возможностей ООП
• Web Application Framework – ответ на возросшие
  требования к веб-приложениям
• Одна из основных задач фреймворка – реализация
  функционала, общего для любого веб-приложения
II. Интернационализация и локализация

               Интернационализация (i18n) –
                 адаптация продукта для
                 потенциального использования
                 практически в любой точке
                 земного шара

               Локализация (L10n) – «тонкая»
                 настройка продукта для
                 использования в конкретном
                 регионе, который имеет
                 уникальные языковые и
                 культурные особенности
Параметры интернационализации
• Язык
     Текст
     Графические элементы, содержащие текст
     Мулитимедийный контент, зависящий от языка
     Правила сравнения/преобразования строк
• Часовой пояс
• Формат даты и времени
• Формат чисел
• Валюта
• Единицы мер и весов
• Адреса и номера телефонов
Интернационализация и локализация
           Понятие локали

          Локаль (locale) – предустановленный
            набор значений для каждого
            параметра интернационализации,
            имеющих смысл для конкретного
            региона


         en_US.UTF-8
        язык     страна     charset
   ISO 639-1   ISO 3166-1
Реализация интернационализации

    Zend Framework                    Symfony
Classes:                   Classes:
Zend_Locale                sfCultureInfo
Zend_Locale_Format         sfI18N
Zend_Translate
Zend_Date                  Functions:
Zend_Currency              __()
Zend_Validate              format_date()
Zend_Form                  format_datetime()
                           format_number()
                           format_currency()
                           format_country()
III. Роутинг/формирование URL


                Основные вопросы

• Обработка запроса в веб-приложении (без учета ACL)
• Формирование friendly URL
• Разбор friendly URL
Процесс обработки запроса без учета ACL

         нет                    да




                   Request содержит:
               •   Модуль
               •   Контроллер
               •   Action
               •   Параметры
                                            нет


                                       да
Роутинг/формирование URL
            Формирование friendly URL

 Формирование URL

Параметры              Системный URL          Friendly URL




                    Таблица преобразований
                      Системные    Friendly
                         URL         URL
Роутинг/формирование URL

                 Разбор friendly URL

Разбор URL

Friendly URL               Системный URL    Параметры




                   Таблица преобразований
                     Системные   Friendly
                        URL        URL
Реализация роутинга/формирования URL

     Zend Framework                            Symfony
Classes:                          Classes:
Zend_Controller_Router_Abstract   sfRouting
Zend_Controller_Router_Rewrite    sfPatternRouting
Zend_Controller_Router_Route      sfRoute
Zend_Controller_Router_Route_*    sfRequestRoute

                                  Functions:
                                  url_for()
                                  link_to()
IV. Многопользовательские приложения,
          разграничение прав
Процесс обработки запроса с учетом прав доступа
             Routing

     Request содержит полную
     информацию о
     запрошенном ресурсе


                                                                        да


                                                            Access Denied

                               да
                                      $request->setControllerName(‘error’)
                                               ->setActionName(‘forbidden’);

           нет
$request->setControllerName(‘auth’)
         ->setActionName(‘login’);
                                                    Controller
Многопользовательские приложения,
       разграничение прав

          ACL – основа систем
 с избирательным управлением доступом


           ACL (Access Control List) – список
             контроля доступа; содержит
             информацию о разрешенных и
             запрещенных операциях субъекта
             над конкретным объектом
Многопользовательские приложения,
             разграничение прав

               Терминология ACL

• Ресурс - объект, к которому необходимо
  контролировать доступ
• Субъект - пользователь, который запрашивает доступ
• Разрешения (Permissions) - режимы доступа к ресурсу
• Роль - название, которое определяется при авторизации
• Сеанс - соответствие между Субъектом, Ролью
  (Разрешениями)
V. События в веб-приложениях


• Проблема зависимостей при модульной архитектуре
  приложения
• Избежание жесткой зависимости модулей с помощью
  событий
• Принцип publish/subscribe (pub/sub)
• Событие (сообщение)
• Отправитель (издатель)
• Получатель (подписчик)
• Диспетчеризация возникшего события
Синхронная диспетчеризация события

...
$eventObj->setFlag(true);
fireEvent(‘event_name’, $eventObj);
                                      $eventListener1->execute($eventObj);
                                      ...
                                      $eventObj->setFlag(false);
                                      ...
                                      $eventListenerN->execute($eventObj);
...
if ($eventObj->getFlag()) ...
Асинхронная диспетчеризация события

...
$eventObj->setFlag(true);
fireEvent(‘event_name’, $eventObj);
if ($eventObj->getFlag()) ...         $eventListener1->execute($eventObj);
…                                     ...
                                      $eventObj->setFlag(false);
                                      ...
                                      $eventListenerN->execute($eventObj);
Реализация publish/subscribe

     Zend Framework                       Symfony
Только в планах :-(            Classes:
                               sfEvent
                               sfEventDispatcher
VI. Производительность и кэширование

                   Кэширование (cache) – сохранение
                     результатов вычисления с целью
                     более быстрого получения
                     результата при выполнении
                     повторного вычисления

             Операции с хранилищем
•   Запись в хранилище
•   Проверка записи в хранилище
•   Чтение из хранилища
•   Удаление записи из хранилища
•   Инвалидация записей в хранилище
Процесс кэширования


calc_cache_id()                           calc()



 check_cache()                            collect_tags()



              да                   нет    save_cache()



                   load_cache ()
Производительность и кэширование
                        Эффективность

t(calc_cache_id())
  t(check_cache())                t(calc_cache_id())
            t(calc())    t_save     t(check_cache())    t_load
   t(collect_tags())                  t(load_cache())
    t(save_cache())


             t_load значительно меньше t(calc())
            t_save незначительно больше t(calc())
Реализация кэширования

    Zend Framework                       Symfony
Classes:                       Classes:
Zend_Cache                     sfCache
Zend_Cache_Backend_*           sf*Cache
Zend_Cache_Frontend_Function   sfFunctionCache
Zend_Cache_Frontend_*
Zend_Cache_Core
VII. Заключение
Спасибо за внимание!
          Дякую за увагу!
            Thank You!



Буду рад ответить на Ваши вопросы!

More Related Content

Viewers also liked

10 000 вёдер или в погоне за Ключом от всех дверей
10 000 вёдер или в погоне за Ключом от всех дверей10 000 вёдер или в погоне за Ключом от всех дверей
10 000 вёдер или в погоне за Ключом от всех дверейMagecom Ukraine
 
Flexibility vs Conformity - lessons learned in Open Source
Flexibility vs Conformity - lessons learned in Open SourceFlexibility vs Conformity - lessons learned in Open Source
Flexibility vs Conformity - lessons learned in Open SourceMagecom Ukraine
 
Деплоймент и распространение обновлений для веб-приложений
Деплоймент и распространение обновлений для веб-приложенийДеплоймент и распространение обновлений для веб-приложений
Деплоймент и распространение обновлений для веб-приложенийMagecom Ukraine
 
Стандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложенияхСтандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложенияхMagecom Ukraine
 
Тестирование Magento с использованием Selenium
Тестирование Magento с использованием SeleniumТестирование Magento с использованием Selenium
Тестирование Magento с использованием SeleniumMagecom Ukraine
 
Extension Marketplace. Площадки для распространения ПО
Extension Marketplace. Площадки для распространения ПОExtension Marketplace. Площадки для распространения ПО
Extension Marketplace. Площадки для распространения ПОMagecom Ukraine
 
Расширение функциональности модульного MVC приложения
Расширение функциональности модульного MVC приложенияРасширение функциональности модульного MVC приложения
Расширение функциональности модульного MVC приложенияMagecom Ukraine
 
Архитектура веб-приложений на примере Zend Framework и Magento
Архитектура веб-приложений  на примере Zend Framework и MagentoАрхитектура веб-приложений  на примере Zend Framework и Magento
Архитектура веб-приложений на примере Zend Framework и MagentoMagecom Ukraine
 
Индексирование в Magento
Индексирование в MagentoИндексирование в Magento
Индексирование в MagentoMagecom Ukraine
 
Управление продуктом в стиле Magento Unified Process
Управление продуктом в стиле Magento Unified ProcessУправление продуктом в стиле Magento Unified Process
Управление продуктом в стиле Magento Unified ProcessMagecom Ukraine
 
Применение компонент-ориентированной архитектуры для написания Magento Extens...
Применение компонент-ориентированной архитектуры для написания Magento Extens...Применение компонент-ориентированной архитектуры для написания Magento Extens...
Применение компонент-ориентированной архитектуры для написания Magento Extens...Magecom Ukraine
 
Все дороги ведут в Checkout
Все дороги ведут в CheckoutВсе дороги ведут в Checkout
Все дороги ведут в CheckoutMagecom Ukraine
 
Преимущества использования полнотекстового поиска в интернет-магазинах
Преимущества использования полнотекстового поиска в интернет-магазинахПреимущества использования полнотекстового поиска в интернет-магазинах
Преимущества использования полнотекстового поиска в интернет-магазинахMagecom Ukraine
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoMagecom Ukraine
 
Ключ успеха – процесс или продукт?
Ключ успеха – процесс или продукт?Ключ успеха – процесс или продукт?
Ключ успеха – процесс или продукт?Magecom Ukraine
 
1000 миллисекунд из жизни Magento
1000 миллисекунд из жизни Magento1000 миллисекунд из жизни Magento
1000 миллисекунд из жизни MagentoMagecom Ukraine
 
Мобильные клиенты интернет-магазинов
Мобильные клиенты интернет-магазиновМобильные клиенты интернет-магазинов
Мобильные клиенты интернет-магазиновMagecom Ukraine
 
Применение TDD при разработке веб-сервисов
Применение TDD при разработке веб-сервисовПрименение TDD при разработке веб-сервисов
Применение TDD при разработке веб-сервисовMagecom Ukraine
 
Система рендеринга в Magento
Система рендеринга в MagentoСистема рендеринга в Magento
Система рендеринга в MagentoMagecom Ukraine
 

Viewers also liked (19)

10 000 вёдер или в погоне за Ключом от всех дверей
10 000 вёдер или в погоне за Ключом от всех дверей10 000 вёдер или в погоне за Ключом от всех дверей
10 000 вёдер или в погоне за Ключом от всех дверей
 
Flexibility vs Conformity - lessons learned in Open Source
Flexibility vs Conformity - lessons learned in Open SourceFlexibility vs Conformity - lessons learned in Open Source
Flexibility vs Conformity - lessons learned in Open Source
 
Деплоймент и распространение обновлений для веб-приложений
Деплоймент и распространение обновлений для веб-приложенийДеплоймент и распространение обновлений для веб-приложений
Деплоймент и распространение обновлений для веб-приложений
 
Стандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложенияхСтандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложениях
 
Тестирование Magento с использованием Selenium
Тестирование Magento с использованием SeleniumТестирование Magento с использованием Selenium
Тестирование Magento с использованием Selenium
 
Extension Marketplace. Площадки для распространения ПО
Extension Marketplace. Площадки для распространения ПОExtension Marketplace. Площадки для распространения ПО
Extension Marketplace. Площадки для распространения ПО
 
Расширение функциональности модульного MVC приложения
Расширение функциональности модульного MVC приложенияРасширение функциональности модульного MVC приложения
Расширение функциональности модульного MVC приложения
 
Архитектура веб-приложений на примере Zend Framework и Magento
Архитектура веб-приложений  на примере Zend Framework и MagentoАрхитектура веб-приложений  на примере Zend Framework и Magento
Архитектура веб-приложений на примере Zend Framework и Magento
 
Индексирование в Magento
Индексирование в MagentoИндексирование в Magento
Индексирование в Magento
 
Управление продуктом в стиле Magento Unified Process
Управление продуктом в стиле Magento Unified ProcessУправление продуктом в стиле Magento Unified Process
Управление продуктом в стиле Magento Unified Process
 
Применение компонент-ориентированной архитектуры для написания Magento Extens...
Применение компонент-ориентированной архитектуры для написания Magento Extens...Применение компонент-ориентированной архитектуры для написания Magento Extens...
Применение компонент-ориентированной архитектуры для написания Magento Extens...
 
Все дороги ведут в Checkout
Все дороги ведут в CheckoutВсе дороги ведут в Checkout
Все дороги ведут в Checkout
 
Преимущества использования полнотекстового поиска в интернет-магазинах
Преимущества использования полнотекстового поиска в интернет-магазинахПреимущества использования полнотекстового поиска в интернет-магазинах
Преимущества использования полнотекстового поиска в интернет-магазинах
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в Magento
 
Ключ успеха – процесс или продукт?
Ключ успеха – процесс или продукт?Ключ успеха – процесс или продукт?
Ключ успеха – процесс или продукт?
 
1000 миллисекунд из жизни Magento
1000 миллисекунд из жизни Magento1000 миллисекунд из жизни Magento
1000 миллисекунд из жизни Magento
 
Мобильные клиенты интернет-магазинов
Мобильные клиенты интернет-магазиновМобильные клиенты интернет-магазинов
Мобильные клиенты интернет-магазинов
 
Применение TDD при разработке веб-сервисов
Применение TDD при разработке веб-сервисовПрименение TDD при разработке веб-сервисов
Применение TDD при разработке веб-сервисов
 
Система рендеринга в Magento
Система рендеринга в MagentoСистема рендеринга в Magento
Система рендеринга в Magento
 

Similar to Современные платформы (фреймворки) разработки веб- приложений на PHP

Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПKirill Chebunin
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKCisco Russia
 
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел КрынецкийJSC “Arcadia Inc”
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Yulia Tsisyk
 
Meeting #4. Frameworks.
Meeting #4. Frameworks.Meeting #4. Frameworks.
Meeting #4. Frameworks.Igor Khrol
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
Разработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéРазработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéInterSystems CEE
 
Pavel Makhrinsky.Field API.DrupalCamp Kyiv 2011
Pavel Makhrinsky.Field API.DrupalCamp Kyiv 2011Pavel Makhrinsky.Field API.DrupalCamp Kyiv 2011
Pavel Makhrinsky.Field API.DrupalCamp Kyiv 2011camp_drupal_ua
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 
александр макаров Yii Rit 2010
александр макаров Yii Rit 2010александр макаров Yii Rit 2010
александр макаров Yii Rit 2010rit2010
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCGetDev.NET
 
Web and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukWeb and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukInterSystems
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Александр Егурцов
 
ук 03.002.01 2011
ук 03.002.01 2011ук 03.002.01 2011
ук 03.002.01 2011etyumentcev
 
2014-04-04 03 Александр Курочкин. PHP. Ускорение, о котором нет смысла спорить.
2014-04-04 03 Александр Курочкин. PHP. Ускорение, о котором нет смысла спорить.2014-04-04 03 Александр Курочкин. PHP. Ускорение, о котором нет смысла спорить.
2014-04-04 03 Александр Курочкин. PHP. Ускорение, о котором нет смысла спорить.Омские ИТ-субботники
 

Similar to Современные платформы (фреймворки) разработки веб- приложений на PHP (20)

Symfony 3
Symfony 3Symfony 3
Symfony 3
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
 
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
 
Meeting #4. Frameworks.
Meeting #4. Frameworks.Meeting #4. Frameworks.
Meeting #4. Frameworks.
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Разработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéРазработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для Caché
 
Pavel Makhrinsky.Field API.DrupalCamp Kyiv 2011
Pavel Makhrinsky.Field API.DrupalCamp Kyiv 2011Pavel Makhrinsky.Field API.DrupalCamp Kyiv 2011
Pavel Makhrinsky.Field API.DrupalCamp Kyiv 2011
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
александр макаров Yii Rit 2010
александр макаров Yii Rit 2010александр макаров Yii Rit 2010
александр макаров Yii Rit 2010
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
 
Web and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukWeb and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard Lebedyuk
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
 
ук 03.002.01 2011
ук 03.002.01 2011ук 03.002.01 2011
ук 03.002.01 2011
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
2014-04-04 03 Александр Курочкин. PHP. Ускорение, о котором нет смысла спорить.
2014-04-04 03 Александр Курочкин. PHP. Ускорение, о котором нет смысла спорить.2014-04-04 03 Александр Курочкин. PHP. Ускорение, о котором нет смысла спорить.
2014-04-04 03 Александр Курочкин. PHP. Ускорение, о котором нет смысла спорить.
 

Современные платформы (фреймворки) разработки веб- приложений на PHP

  • 1. Современные платформы (фреймворки) разработки веб- приложений на PHP Сергей Шимко Разработчик Magento Community и Enterprise Editions
  • 2. Современные платформы (фреймворки) разработки веб-приложений на PHP Структура доклада I. Введение IV. Многопользовательские • Требования к приложения, платформам разработки разграничение прав • Преобладание V. События в веб- парадигмы OOP и паттерна MVC приложениях (принцип publish/subscribe) II. Интернационализация, локализация VI. Производительность, кэширование III. Роутинг/формирование URL VII. Заключение
  • 3. I. Введение Основные тезисы • Долгое время разработка веб-сайтов велась без использования возможностей ООП • Web Application Framework – ответ на возросшие требования к веб-приложениям • Одна из основных задач фреймворка – реализация функционала, общего для любого веб-приложения
  • 4. II. Интернационализация и локализация Интернационализация (i18n) – адаптация продукта для потенциального использования практически в любой точке земного шара Локализация (L10n) – «тонкая» настройка продукта для использования в конкретном регионе, который имеет уникальные языковые и культурные особенности
  • 5. Параметры интернационализации • Язык  Текст  Графические элементы, содержащие текст  Мулитимедийный контент, зависящий от языка  Правила сравнения/преобразования строк • Часовой пояс • Формат даты и времени • Формат чисел • Валюта • Единицы мер и весов • Адреса и номера телефонов
  • 6. Интернационализация и локализация Понятие локали Локаль (locale) – предустановленный набор значений для каждого параметра интернационализации, имеющих смысл для конкретного региона en_US.UTF-8 язык страна charset ISO 639-1 ISO 3166-1
  • 7. Реализация интернационализации Zend Framework Symfony Classes: Classes: Zend_Locale sfCultureInfo Zend_Locale_Format sfI18N Zend_Translate Zend_Date Functions: Zend_Currency __() Zend_Validate format_date() Zend_Form format_datetime() format_number() format_currency() format_country()
  • 8. III. Роутинг/формирование URL Основные вопросы • Обработка запроса в веб-приложении (без учета ACL) • Формирование friendly URL • Разбор friendly URL
  • 9. Процесс обработки запроса без учета ACL нет да Request содержит: • Модуль • Контроллер • Action • Параметры нет да
  • 10. Роутинг/формирование URL Формирование friendly URL Формирование URL Параметры Системный URL Friendly URL Таблица преобразований Системные Friendly URL URL
  • 11. Роутинг/формирование URL Разбор friendly URL Разбор URL Friendly URL Системный URL Параметры Таблица преобразований Системные Friendly URL URL
  • 12. Реализация роутинга/формирования URL Zend Framework Symfony Classes: Classes: Zend_Controller_Router_Abstract sfRouting Zend_Controller_Router_Rewrite sfPatternRouting Zend_Controller_Router_Route sfRoute Zend_Controller_Router_Route_* sfRequestRoute Functions: url_for() link_to()
  • 14. Процесс обработки запроса с учетом прав доступа Routing Request содержит полную информацию о запрошенном ресурсе да Access Denied да $request->setControllerName(‘error’) ->setActionName(‘forbidden’); нет $request->setControllerName(‘auth’) ->setActionName(‘login’); Controller
  • 15. Многопользовательские приложения, разграничение прав ACL – основа систем с избирательным управлением доступом ACL (Access Control List) – список контроля доступа; содержит информацию о разрешенных и запрещенных операциях субъекта над конкретным объектом
  • 16. Многопользовательские приложения, разграничение прав Терминология ACL • Ресурс - объект, к которому необходимо контролировать доступ • Субъект - пользователь, который запрашивает доступ • Разрешения (Permissions) - режимы доступа к ресурсу • Роль - название, которое определяется при авторизации • Сеанс - соответствие между Субъектом, Ролью (Разрешениями)
  • 17. V. События в веб-приложениях • Проблема зависимостей при модульной архитектуре приложения • Избежание жесткой зависимости модулей с помощью событий • Принцип publish/subscribe (pub/sub) • Событие (сообщение) • Отправитель (издатель) • Получатель (подписчик) • Диспетчеризация возникшего события
  • 18. Синхронная диспетчеризация события ... $eventObj->setFlag(true); fireEvent(‘event_name’, $eventObj); $eventListener1->execute($eventObj); ... $eventObj->setFlag(false); ... $eventListenerN->execute($eventObj); ... if ($eventObj->getFlag()) ...
  • 19. Асинхронная диспетчеризация события ... $eventObj->setFlag(true); fireEvent(‘event_name’, $eventObj); if ($eventObj->getFlag()) ... $eventListener1->execute($eventObj); … ... $eventObj->setFlag(false); ... $eventListenerN->execute($eventObj);
  • 20. Реализация publish/subscribe Zend Framework Symfony Только в планах :-( Classes: sfEvent sfEventDispatcher
  • 21. VI. Производительность и кэширование Кэширование (cache) – сохранение результатов вычисления с целью более быстрого получения результата при выполнении повторного вычисления Операции с хранилищем • Запись в хранилище • Проверка записи в хранилище • Чтение из хранилища • Удаление записи из хранилища • Инвалидация записей в хранилище
  • 22. Процесс кэширования calc_cache_id() calc() check_cache() collect_tags() да нет save_cache() load_cache ()
  • 23. Производительность и кэширование Эффективность t(calc_cache_id()) t(check_cache()) t(calc_cache_id()) t(calc()) t_save t(check_cache()) t_load t(collect_tags()) t(load_cache()) t(save_cache()) t_load значительно меньше t(calc()) t_save незначительно больше t(calc())
  • 24. Реализация кэширования Zend Framework Symfony Classes: Classes: Zend_Cache sfCache Zend_Cache_Backend_* sf*Cache Zend_Cache_Frontend_Function sfFunctionCache Zend_Cache_Frontend_* Zend_Cache_Core
  • 26. Спасибо за внимание! Дякую за увагу! Thank You! Буду рад ответить на Ваши вопросы!