Your SlideShare is downloading. ×
0
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Внедрение аспектов в PHP с помощью библиотеки GO! AOP

2,210

Published on

Презентация к докладу на SymfonyCampUA-2012. …

Презентация к докладу на SymfonyCampUA-2012.

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

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,210
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
15
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  1. Избавляемся от дублирования кода:внедрение аспектов в PHP с помощью библиотеки Go! AOP Alexander Lisachenko lisachenko.it@gmail.com
  2. О докладчике Лисаченко Александр• Архитектор веб-приложений в Alpari• Идеолог Symfony2: почти десяток внутреннихсервисов на Symfony2, в т.ч. и основной сайт alpari.ru(CDN,Varnish+ESI, Twig, Assetic, ~60 сабмодулей, ~20бандлов)
  3. Эволюция программирования• Машинное программирование;• Структурированное программирование;• Процедурное программирование;• Модульное программирование;• Объектно-ориентированное программирование;• < новая высокоуровневая парадигма >
  4. Старое , доброе ООП …Ключевые элементы: классы, объекты.Принципы: абстрагирование, инкапсуляция,наследование, полиморфизм.
  5. Принцип единственной ответственности
  6. Принцип единственной ответственности
  7. Принцип единственной ответственности
  8. Авторизация ...
  9. Журналирование ...
  10. Обработка ошибок ...
  11. Почему же это так ?Всему виной сквозная функциональность,пронизывающая весь код, подобно шампуру.Этот код не может быть вынесен в отдельныеклассы и лежит везде:• кэширование;• журналирование;• обработка исключений;• проверка доступа;• транзакционность.
  12. Что у нас в итоге ?Клинический диагноз типичного приложения:<censored>-код:• непригодный к повторному использованию;• трудно понять исходное предназначениекласса, запутанная логика, большаяцикломатическая сложность;• больше вероятность допустить ошибку, забыввписать «шаблонный» код;• копирование кода обработки, нарушениепринципа DRY.
  13. АОП нам в помощь !
  14. АОП нам в помощь !Аспектно-ориентированное программирование (АОП)• АОП - методика программирования в рамках классовой парадигмы, основанная на понятии аспекта — блока кода, инкапсулирующего сквозное поведение в составе классов.
  15. История возникновения АОП•1974 – принцип разделения ответственности•1990е – исследования АОП • Composition Filters • Субъектно-ориентированное программирование • Адаптивное программирование• 1997 - Аспектно-ориентированноепрограммирование (доклад на европейскойконференции по ООП)• 2001 – разработка АОП фреймворка AspectJ
  16. Основные понятия АОП• Аспект (англ. aspect) — модуль или класс,реализующий сквозную функциональность.Аспект изменяет поведение остального кода,применяя совет в точках соединения,определённых некоторым срезом.• Совет (англ. advice) — средство оформлениякода, который должен быть вызван из точкисоединения. Совет может быть выполнен до,после или вместо точки соединения.
  17. Основные понятия АОП• Точка соединения (англ. join point) — точка ввыполняемой программе, где следуетприменить совет.• Срез (англ. pointcut) — набор точексоединения. Срез определяет, подходит лиданная точка соединения к данному совету.• Внедрение (англ. introduction, введение) —изменение структуры класса и/или изменениеиерархии наследования для добавленияфункциональности аспекта в инородный код.
  18. Основные понятия АОП
  19. Базовые типы советов (Advice)• Before - совет выполняется до вызываемогометода или свойства.• After - совет выполняется после вызываемогометода.• Around - совет выполняется вместовызываемого метода. Внутри обработчика естьвозможность ручной передачи управления ввызываемый метод, если это необходимо.
  20. Базовые типы советов (Advice) Before Before After Throwing After
  21. Место для АОП в PHP АОП органично дополняет существующиетехнологии в единое целое:• Внедрение зависимостей (IoC, DIC)• Абстракция сервисов (yaml, xml, php)• Аспектно-ориентированное программирование
  22. Место для АОП в PHP• Внедрение зависимостей• Абстракция сервисов• Аспектно-ориентированное программирование
  23. Текущие реализации АОП в PHP Перспективные решения:• AOP-PHP• JMSAopBundle• TYPO3 Flow AOP component Кладбище реализаций:• PHPAspect• Aspect-Oriented PHP• AspectPHP
  24. Библиотека Go! Базовая идея не нова — заменяем классаналогичной реализацией-декоратором. Ключевые моменты: • Статический анализ классов перед их загрузкой в память (php-token-reflection, ядро ApiGen) • Изменяем иерархию классов «на лету» • Модификация исходного кода класса в момент загрузки класса, кэшируем готовые классы
  25. Библиотека Go!• Не использует PHP-расширений, целикомнаписана на самом PHP;• Не требует DI-контейнера для подменысервисов прокси-объектами;• Может перехватывать методы в финальныхклассах, финальные методы, а такжестатические методы;• Может перехватывать обращения кпубличным и защищенным полям;• Чистый генерируемый код, удобно проводитьотладку классов и аспектов с помощью XDebug
  26. Исходный код класса
  27. Класс аспекта
  28. Результат выполнения
  29. Обработанный код класса
  30. Ловись рыбка большая ...
  31. Ловись рыбка большая ...
  32. Пример кэширования с аспектом
  33. Что ожидается еще ?• Парсер pointcut-ов (смотрим на FLOW3)• Introduction — навешиваем трейты иинтерфейсы на классы• Кэширование массива советов в shared-памяти— не нужно проверять в рантайме вообщеничего (привет, сериализация Closure)• Поддержка точек init — отлаливаем всеконструкции new и выполняем свой код• Максимальная производительность :)
  34. Благодарю за внимание! Вопросы?Профиль нашей Ссылка накомпании на hh.ru библиотеку

×