Внедрение аспектов в php с помощью библиотеки go! aop

Post on 02-Jul-2015

2.226 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

Презентация к докладу на SymfonyCampUA-2012. В докладе рассмотрены основные вопросы работы с АОП в PHP, даны определения аспектов, срезов, советов, а также рассмотрено реальное использование библиотеки GO! для внедрения аспектно-ориентированной парадигмы в любое приложение.

TRANSCRIPT

Alexander Lisachenkolisachenko.it@gmail.com

: Избавляемся от дублирования кода внедрение аспектов в PHP с помощью библиотеки

Go! AOP

О докладчике

Лисаченко Александр• - Архитектор веб приложений в Alpari

• Идеолог Symfony2: почти десяток внутренних сервисов на Symfony2, . . в т ч и основной сайт alpari.ru

(CDN, Varnish+ESI, Twig, Assetic, ~60 , сабмодулей ~20 ) бандлов

• ;Машинное программирование

• ;Структурированное программирование

• ;Процедурное программирование

• ;Модульное программирование

• - ;Объектно ориентированное программирование

• < новая высокоуровневая парадигма >

Эволюция программирования

: , .Ключевые элементы классы объекты

: , , Принципы абстрагирование инкапсуляция, .наследование полиморфизм

, …Старое доброе ООП

Принцип единственной ответственности

Принцип единственной ответственности

Принцип единственной ответственности

...Авторизация

...Журналирование

...Обработка ошибок

, Всему виной сквозная функциональность , .пронизывающая весь код подобно шампуру

Этот код не может быть вынесен в отдельные :классы и лежит везде

• ;кэширование

• ;журналирование

• ;обработка исключений

• ;проверка доступа

• .транзакционность

?Почему же это так

: Клинический диагноз типичного приложения<censored>- :код

• ;непригодный к повторному использованию

• трудно понять исходное предназначение, , класса запутанная логика большая

;цикломатическая сложность

• , больше вероятность допустить ошибку забыв « » ;вписать шаблонный код

• , копирование кода обработки нарушение принципа DRY.

?Что у нас в итоге

!АОП нам в помощь

!АОП нам в помощь

- Аспектно ориентированное программирование( )АОП

• - АОП методика программирования в рамках , классовой парадигмы основанная на понятии

— , аспекта блока кода инкапсулирующего .сквозное поведение в составе классов

История возникновения АОП

•1974 – принцип разделения ответственности

•1990 – е исследования АОП

• Composition Filters

• - Субъектно ориентированноепрограммирование

• Адаптивное программирование

• 1997 - - Аспектно ориентированное ( программирование доклад на европейской

)конференции по ООП

• 2001 – AspectJразработка АОП фреймворка

Основные понятия АОП

• ( . aspect) — , Аспект англ модуль или класс . реализующий сквозную функциональность

, Аспект изменяет поведение остального кода , применяя совет в точках соединения

.определённых некоторым срезом

• ( . advice) — Совет англ средство оформления, кода который должен быть вызван из точки

. , соединения Совет может быть выполнен до .после или вместо точки соединения

Основные понятия АОП

• ( . join point) — Точка соединения англ точка в , выполняемой программе где следует

. применить совет

• ( . pointcut) — Срез англ набор точек. , соединения Срез определяет подходит ли

. данная точка соединения к данному совету

• ( . introduction, ) — Внедрение англ введение / изменение структуры класса и или изменение

иерархии наследования для добавления . функциональности аспекта в инородный код

Основные понятия АОП

(Advice)Базовые типы советов

• Before - совет выполняется до вызываемого . метода или свойства

• After - совет выполняется после вызываемого. метода

• Around - совет выполняется вместо . вызываемого метода Внутри обработчика есть возможность ручной передачи управления в , . вызываемый метод если это необходимо

(Advice)Базовые типы советов

Before

Before

After

After Throwing

Место для АОП в PHP

АОП органично дополняет существующие :технологии в единое целое

• (IoC, DIC)Внедрение зависимостей• (yaml, xml, php)Абстракция сервисов• - Аспектно ориентированное программирование

Место для АОП в PHP

• Внедрение зависимостей• Абстракция сервисов• - Аспектно ориентированное программирование

PHPТекущие реализации АОП в

:Перспективные решения

• AOP-PHP

• JMSAopBundle

• TYPO3 Flow AOP component

:Кладбище реализаций

• PHPAspect

• Aspect-Oriented PHP

• AspectPHP

Go!Библиотека

— Базовая идея не нова заменяем класс - .аналогичной реализацией декоратором

:Ключевые моменты

• Статический анализ классов перед их (php-token-reflection, загрузкой в память ядро

ApiGen)

• « »Изменяем иерархию классов на лету

• Модификация исходного кода класса в , момент загрузки класса кэшируем готовые

классы

Go!Библиотека

• PHP- , Не использует расширений целиком PHP;написана на самом

• DI- Не требует контейнера для подмены - ;сервисов прокси объектами

• Может перехватывать методы в финальных, , классах финальные методы а также

;статические методы

• Может перехватывать обращения к ;публичным и защищенным полям

• , Чистый генерируемый код удобно проводить XDebugотладку классов и аспектов с помощью

Исходный код класса

Класс аспекта

Результат выполнения

Обработанный код класса

...Ловись рыбка большая

...Ловись рыбка большая

Пример кэширования с аспектом

?Что ожидается еще

• pointcut- ( FLOW3)Парсер ов смотрим на

• Introduction — навешиваем трейты и интерфейсы на классы

• shared- Кэширование массива советов в памяти— не нужно проверять в рантайме вообще

( , Closure)ничего привет сериализация

• init — Поддержка точек отлаливаем все new конструкции и выполняем свой код

• :)Максимальная производительность

! Благодарю за внимание?Вопросы

Профиль нашей hh.ruкомпании на

Ссылка набиблиотеку

top related