Что несёт нам Zend Framework 2.0? презентация

Содержание


Презентации» Шаблоны, фоны презентаций» Что несёт нам Zend Framework 2.0?
Что несёт нам Zend Framework 2.0?Планируемые измененияПространства имен
 Пространства имен
 __invoke()
 Замыкания
 Goto
 Late Static Binding (LSB)Унифицированный конструктор 
 Унифицированный конструктор 
 Стандартизация массива Options
 Исключения
 Контрактноеunderscore_separated_keys 
 underscore_separated_keys 
 camelCasedKeys 
 UPPERCASEDKEYS 
 lowercasedkeysDesign By Contract
 Design By Contract
 формальные, точные и верифицируемые интерфейсы
Почему стоит отказаться от синглтона:
  Почему стоит отказаться от синглтона:
Plugins/Helpers/Strategies
 Plugins/Helpers/Strategies
 Decorators
 Factories
 Caching__invoke() 
 __invoke()Closures (Замыкания)
 Closures (Замыкания)Pros:
 Pros:
 Польза для фреймворка в целом и Zend_Controller и Zend_Search_LuceneПолезно при работе с конечными автоматами (FSM - Finite State Machine)Три стандартных типа:
 	Три стандартных типа:
 Chains
 	(валидаторы, фильтры, декораторы)
 HelpersОтсутствие единообразия имен 
 Отсутствие единообразия имен 
 Разнообразие вызовов:
 ActionИспользование пространств имен
 Использование пространств имен
 $loader->registerNamespace('My\Validators');  
 $class = $loader->load('foo'); //My\Validators\Foo   
Предполагается, что хэлперы будут всегда использовать __invoke()
 Предполагается, что хэлперы будутПример использования:
 Пример использования:Все адаптеры должны реализовывать интерфейс "Configurable".	
 Все адаптеры должны реализовывать интерфейсФабрики будут создавать объект адаптера и передавать ему опции.
 Фабрики будутЦепочки должны расширять один из классов компонента pubsub:
 Цепочки должны расширятьModel-View-Controller 
 Model-View-Controller 
 	(MVC, «Модель-представление-поведение», «Модель-представление-контроллер») — архитектура программного обеспечения. 
Zend_Controller 2.0
 Zend_Controller 2.0
 Zend_Controller_Router 2.0
 Zend_View 2.0
 Zend_Session 2.0
 Zend_FormЦели рефакторинга:
 Цели рефакторинга:
 	После всех изменений компонент должен стать:
 небольшим
Две методики :
 Две методики :
 конечный автомат (FSM)
 событийная модельРеализация похожа на dojo pubsub
 Реализация похожа на dojo pubsub
 PubSubСобытийная модель: 
 Событийная модель: 
 Определяется 4 состояния: routing, dispatching,Объект Request 
 Объект Request 
 Объект Response 
 Объект RendererПлагины фронт контроллера подписываются только на нужные темы
 Плагины фронт контроллераСейчас по умолчанию не производится никакой фильтрации приходящих данных
 Сейчас поПередача ошибки поиска action из __call в noRouteAction()
 Передача ошибки поискалегкость
 легкость
 контрактное программирование
 роутер будет работать с объектами запросов
 будутИспользуется реализация "Horde Routes"
 Используется реализация "Horde Routes"
 Метод getInstance() предполагаетсяПоиск совпадений по дереву (tree-matching). 
 Поиск совпадений по дереву (tree-matching).Из объекта HTTP Request будет создаваться уникальный ключ
 Из объекта HTTPПроблемы текущей реализации:
 Проблемы текущей реализации:
 Одновременная реализация как логики МоделиИзменение form*() view helpers так, чтобы они могли принимать элементы илиРаботать с декораторами можно, используя метод PubSub filter():
 Работать с декораторамиИспользование PubSub как базы для цепочек фильтров и валидаторов позволит ихДля полного разделения View и Model нужно доставать цепочки из формыОбъектная структура:
 Объектная структура:Все классы форм могут определять свойство "metadata", содержащее пары ключ/значение, иСейчас все элементы Zend_Form генерируют id. 
 Сейчас все элементы Zend_FormКонфигурация: создание цепочек из конфигурации больше не будет доступно.
 Конфигурация: созданиеВ Zend Framework 1.x компонент Zend_Session является труднотестируемым.
 В Zend FrameworkПланируется:
 Планируется:
 реализация компонента упростится и станет гибче
 добавятся брокеры дляСписок других элементов:
 Список других элементов:
 Zend_Http_Client 2.0
 Zend_Soap 2.0
 Zend_MailGIT
 GIT
 ACL не накладывает ограничений. Каждый разработчик сможет создать локальнуюАбстрактные классы
 имена абстрактных классов будут предваряться словом "Abstract" : AbstractController,Надежда Блинова: nadezhda.blinova@wizartech.ru
 Надежда Блинова: nadezhda.blinova@wizartech.ru
 Георгий Туревич: georgy.turevich@wizartech.ru



Слайды и текст этой презентации
Слайд 1
Описание слайда:
Что несёт нам Zend Framework 2.0?


Слайд 2
Описание слайда:
Планируемые изменения

Слайд 3
Описание слайда:
Пространства имен Пространства имен __invoke() Замыкания Goto Late Static Binding (LSB) И др.

Слайд 4
Описание слайда:
Унифицированный конструктор Унифицированный конструктор Стандартизация массива Options Исключения Контрактное программирование Уменьшение количества синглтонов Создание компонентов общего назначения Новые возможности Php 5.3 в плагинах Автозагрузка Пространства имен goto Изменения в плагинах

Слайд 5
Описание слайда:

Слайд 6
Описание слайда:

Слайд 7
Описание слайда:

Слайд 8
Описание слайда:

Слайд 9
Описание слайда:

Слайд 10
Описание слайда:
underscore_separated_keys underscore_separated_keys camelCasedKeys UPPERCASEDKEYS lowercasedkeys

Слайд 11
Описание слайда:

Слайд 12
Описание слайда:
Design By Contract Design By Contract формальные, точные и верифицируемые интерфейсы Минимальные требования к компонентам будут вынесены в интерфейсы. С интерфейсами будут предложены стандартные реализации Разработчик сможет расширять стандартные и создавать кастомные реализации на основе интерфейса

Слайд 13
Описание слайда:
Почему стоит отказаться от синглтона: Почему стоит отказаться от синглтона: Глобальное состояние усложняет разработку и тестирование Зависимость обычного класса от синглтона не видна в публичном контракте класса Наличие синглтона понижает тестируемость приложения в целом и классов, которые используют синглтон, в частности

Слайд 14
Описание слайда:
Plugins/Helpers/Strategies Plugins/Helpers/Strategies Decorators Factories Caching

Слайд 15
Описание слайда:
__invoke() __invoke()

Слайд 16
Описание слайда:
Closures (Замыкания) Closures (Замыкания)

Слайд 17
Описание слайда:
Pros: Pros: Польза для фреймворка в целом и Zend_Controller и Zend_Search_Lucene в частности Создание отдельного пространства для unit тестирования: \Test\Zend, \Zend\Test, или \ZendTest Cons Глобальное переписывание кода

Слайд 18
Описание слайда:
Полезно при работе с конечными автоматами (FSM - Finite State Machine) Полезно при работе с конечными автоматами (FSM - Finite State Machine) парсерами синтаксическими / лексическими анализаторами Компоненты: Zend_Controller_Front Zend_Ical Zend_Search_Lucene Zend_Markup …

Слайд 19
Описание слайда:
Три стандартных типа: Три стандартных типа: Chains (валидаторы, фильтры, декораторы) Helpers (action helpers, view helpers) Adapters (form display groups, subforms и элементы; database adapters; translation adapters и др. )

Слайд 20
Описание слайда:
Отсутствие единообразия имен Отсутствие единообразия имен Разнообразие вызовов: Action helpers: direct() View helpers: formSelect() (имя класса) Validators: isValid() Filters: filter() Снижение производительности: PluginLoader производит лишние операции при каждом поиске. Нет единой парадигмы для конструкторов и/или конфигураций адаптеров Нет единой парадигмы для передачи информации фабрикам

Слайд 21
Описание слайда:
Использование пространств имен Использование пространств имен $loader->registerNamespace('My\Validators');  $class = $loader->load('foo'); //My\Validators\Foo  un/registerNamespace() вместо addPrefixPath() class_exists() Использование имен-через-дефис-в-нижнем-регистре $loader->registerNamespace('My\Validators');  $class = $loader->load('foo-bar');  //My\Validators\FooBar Игнорирование нижнего подчеркивания поиском плагинов

Слайд 22
Описание слайда:
Предполагается, что хэлперы будут всегда использовать __invoke() Предполагается, что хэлперы будут всегда использовать __invoke()

Слайд 23
Описание слайда:
Пример использования: Пример использования:

Слайд 24
Описание слайда:
Все адаптеры должны реализовывать интерфейс "Configurable". Все адаптеры должны реализовывать интерфейс "Configurable".

Слайд 25
Описание слайда:
Фабрики будут создавать объект адаптера и передавать ему опции. Фабрики будут создавать объект адаптера и передавать ему опции.

Слайд 26
Описание слайда:
Цепочки должны расширять один из классов компонента pubsub: Цепочки должны расширять один из классов компонента pubsub: Provider FilterChain Построение стандартных цепочек везде, где это доступно, например, в декораторах Расширение цепочек и добавление подклассов к объектам, которые их подключают Цепочки должны вести себя как загрузчики плагинов, либо подключать загрузчики плагинов

Слайд 27
Описание слайда:
Model-View-Controller Model-View-Controller (MVC, «Модель-представление-поведение», «Модель-представление-контроллер») — архитектура программного обеспечения. Шаблон MVC позволяет разделить данные, представление и обработку действий пользователя на три отдельных компонента Модель (Model) Модель предоставляет данные и реагирует на запросы, изменяя свое состояние. Представление (View) Отвечает за отображение информации (пользовательский интерфейс). Поведение (Controller) Интерпретирует данные, введенные пользователем, и информирует модель и представление о необходимости соответствующей реакции.

Слайд 28
Описание слайда:
Zend_Controller 2.0 Zend_Controller 2.0 Zend_Controller_Router 2.0 Zend_View 2.0 Zend_Session 2.0 Zend_Form 2.0

Слайд 29
Описание слайда:
Цели рефакторинга: Цели рефакторинга: После всех изменений компонент должен стать: небольшим гибким свободно расширяемым легким в создании и использовании кастомных реализаций

Слайд 30
Описание слайда:
Две методики : Две методики : конечный автомат (FSM) событийная модель (Event-driven model)

Слайд 31
Описание слайда:
Реализация похожа на dojo pubsub Реализация похожа на dojo pubsub PubSub == Publish/Subscribe, организация взаимодействий по подписке Основные методы: publish() subscribe()

Слайд 32
Описание слайда:

Слайд 33
Описание слайда:

Слайд 34
Описание слайда:

Слайд 35
Описание слайда:
Событийная модель: Событийная модель: Определяется 4 состояния: routing, dispatching, response, error Методам передается событие (Event) Методы изменяют состояние события Вызывающий метод проверяет состояние и реагирует на изменение.

Слайд 36
Описание слайда:

Слайд 37
Описание слайда:

Слайд 38
Описание слайда:

Слайд 39
Описание слайда:
Объект Request Объект Request Объект Response Объект Renderer Объект Router Объект Dispatcher Action controllers Объект ErrorHandler

Слайд 40
Описание слайда:
Плагины фронт контроллера подписываются только на нужные темы Плагины фронт контроллера подписываются только на нужные темы Action helper broker может быть встроен в объект Event Объект View станет зависимым от рендерера, который, в свою очередь, подчинен объекту Responce. Остается возможность внедрить собственные реализации Достигается большой выигрыш производительности

Слайд 41
Описание слайда:
Сейчас по умолчанию не производится никакой фильтрации приходящих данных Сейчас по умолчанию не производится никакой фильтрации приходящих данных Планируется добавить фильтрацию/валидацию по умолчанию для суперглобальных массивов К суперглобальным массивам без фильтрации обращаться через методы getRaw*()

Слайд 42
Описание слайда:
Передача ошибки поиска action из __call в noRouteAction() Передача ошибки поиска action из __call в noRouteAction() Использование оверлоадинга для доступа к action helpers: __call() будет изменен.

Слайд 43
Описание слайда:
легкость легкость контрактное программирование роутер будет работать с объектами запросов будут исправлены те ошибки, которые сложно исправить без нарушения обратной совместимости

Слайд 44
Описание слайда:
Используется реализация "Horde Routes" Используется реализация "Horde Routes" Метод getInstance() предполагается удалить getDefault() и getDefaults() могут стать методами интерфейса Метод match() будет принимать только объект Zend\Controller\Request\Http Построение маршрутов через конфиг Цепочки Маршрут Hostname Поддержка кэширования

Слайд 45
Описание слайда:
Поиск совпадений по дереву (tree-matching). Поиск совпадений по дереву (tree-matching). В дереве ищется только одно совпадение. Достаточно всего раз отыскать имя хоста вместо поиска его для каждого нового маршрута.

Слайд 46
Описание слайда:
Из объекта HTTP Request будет создаваться уникальный ключ Из объекта HTTP Request будет создаваться уникальный ключ Найденный результат сохранится. Каждый отдельный маршрут будет достаточно найти единожды.

Слайд 47
Описание слайда:
Проблемы текущей реализации: Проблемы текущей реализации: Одновременная реализация как логики Модели (фильтрация, валидация, метаданные), так и логики Вида (рендеринг, декораторы) Использование объектов формы для валидации Неоднозначная реализация системы декораторов

Слайд 48
Описание слайда:
Изменение form*() view helpers так, чтобы они могли принимать элементы или другие объекты Zend_Form Изменение form*() view helpers так, чтобы они могли принимать элементы или другие объекты Zend_Form

Слайд 49
Описание слайда:
Работать с декораторами можно, используя метод PubSub filter(): Работать с декораторами можно, используя метод PubSub filter():

Слайд 50
Описание слайда:
Использование PubSub как базы для цепочек фильтров и валидаторов позволит их присоединять и отсоединять. Использование PubSub как базы для цепочек фильтров и валидаторов позволит их присоединять и отсоединять.

Слайд 51
Описание слайда:
Для полного разделения View и Model нужно доставать цепочки из формы для использования в модели – и наоборот: Для полного разделения View и Model нужно доставать цепочки из формы для использования в модели – и наоборот:

Слайд 52
Описание слайда:
Объектная структура: Объектная структура:

Слайд 53
Описание слайда:

Слайд 54
Описание слайда:
Все классы форм могут определять свойство "metadata", содержащее пары ключ/значение, и набор методов set/get для метаданных Все классы форм могут определять свойство "metadata", содержащее пары ключ/значение, и набор методов set/get для метаданных

Слайд 55
Описание слайда:
Сейчас все элементы Zend_Form генерируют id. Сейчас все элементы Zend_Form генерируют id. Отмена генерации id решит целый ряд проблем с UI. Перевод можно перенести в слой view. Цепочки View и Decorators будут получать объект Translator.

Слайд 56
Описание слайда:
Конфигурация: создание цепочек из конфигурации больше не будет доступно. Конфигурация: создание цепочек из конфигурации больше не будет доступно. Метаданные: отдельный контейнер "metadata" может повлечь проблемы с уже существующими конфигурациями. Удаление ID: Удаление генерации id может повлечь за собой проблемы с UI. Эта особенность, возможно, будет конфигурируемой.

Слайд 57
Описание слайда:
В Zend Framework 1.x компонент Zend_Session является труднотестируемым. В Zend Framework 1.x компонент Zend_Session является труднотестируемым. Планируется: сделать Zend_Session более тестируемым добавить возможность инъекции массива сессии Zend_Session больше не будет синглтоном

Слайд 58
Описание слайда:
Планируется: Планируется: реализация компонента упростится и станет гибче добавятся брокеры для управления фильтрами и хэлперами благодаря изменениям в MVC переменные будут передаваться во view script по токену

Слайд 59
Описание слайда:
Список других элементов: Список других элементов: Zend_Http_Client 2.0 Zend_Soap 2.0 Zend_Mail 2.0 Планируется улучшить, переработать или внести улучшения / исправления багов, требующие BC breaks Подробнее: http://framework.zend.com/wiki/display/ZFDEV2/Home

Слайд 60
Описание слайда:
GIT GIT ACL не накладывает ограничений. Каждый разработчик сможет создать локальную копию репозитория Требования к пропускной способности и объему хранилища ниже Упрощается разделение на ветки Возможность организовать рабочие процессы, отличающиеся от рабочих процессов SVN

Слайд 61
Описание слайда:

Слайд 62
Описание слайда:
Абстрактные классы имена абстрактных классов будут предваряться словом "Abstract" : AbstractController, AbstractForm, и т.п. Интерфейсы должны именоваться описательно и достаточно обобщенно не должны конфликтовать должны четко указывать на задачи интерфейса Configurable Adaptable Resource Role Loadable Builder Указания типов должны использовать доступные псевдонимы везде, где возможно если имя класса появляется в области видимости всего раз, ему тоже рекомендуется задать псевдоним

Слайд 63
Описание слайда:
Надежда Блинова: nadezhda.blinova@wizartech.ru Надежда Блинова: nadezhda.blinova@wizartech.ru Георгий Туревич: georgy.turevich@wizartech.ru


Скачать презентацию на тему Что несёт нам Zend Framework 2.0? можно ниже:

Похожие презентации