Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Design patterns "Proxy". PHP

Design patterns "Proxy". PHP

Avatar for Anna Brytyk

Anna Brytyk

August 31, 2018
Tweet

More Decks by Anna Brytyk

Other Decks in Programming

Transcript

  1. Заместитель (Proxy) Заместитель — это структурный паттерн проектирования, который позволяет

    подставлять вместо реальных объектов специальные объекты-заменители. Эти объекты перехватывают вызовы к оригинальному объекту, позволяя сделать что-то до или после передачи вызова оригиналу. Наиболее частым применением паттерна прокси является ленивая загрузка (lazy load). "Тяжелые" объекты не всегда разумно загружать в момент инициализации. Более правильным решением будет загрузить его по первому требованию. 3
  2. Причины 1. Объект требует много времени и ресурсов для инициализации

    2. Объект очень сложен – proxy создает видимость более простого объекта 3. Доступ к объекту требует предварительных действий 4. От пользователя требуется скрыть, какой класс сервиса используется 4
  3. Структура 1. Интерфейс сервиса определяет общий интерфейс для сервиса и

    заместителя. Благодаря этому, объект заместителя можно использовать там, где ожидается объект сервиса. 2. Сервис содержит полезную бизнес-логику. 3. Заместитель хранит ссылку на объект сервиса. После того как заместитель заканчивает свою работу (например, инициализацию, логирование, защиту или другое), он передает вызовы вложенному сервису. Заместитель может сам отвечать за создание и удаление объекта сервиса. 4. Клиент работает с объектами через интерфейс сервиса. Благодаря этому, его можно «одурачить», подменив объект сервиса объектом заместителя. 5
  4. 8

  5. 9

  6. 10

  7. 11

  8. Типы ❖ Удаленный заместитель (англ. remote proxies). ❖ Виртуальный заместитель

    (англ. virtual proxies). ❖ Защищающий заместитель (англ. protection proxies). ❖ Smart reference proxy. 13
  9. Преимущества и недостатки ❖ Позволяет контролировать сервисный объект незаметно для

    клиента. ❖ Может работать, даже если сервисный объект ещё не создан. ❖ Может контролировать жизненный цикл служебного объекта. ❖ Усложняет код программы из-за введения дополнительных классов. ❖ Увеличивает время отклика от сервиса. 14
  10. Применение ❖ Ленивая инициализация (виртуальный прокси). Когда у вас есть

    тяжёлый объект, грузящий данные из файловой системы или базы данных. ❖ Защита доступа (защищающий прокси). Когда в программе есть разные типы пользователей и вам хочется защищать объект от неавторизованного доступа. ❖ Локальный запуск сервиса (удалённый прокси). Когда настоящий сервисный объект находится на удалённом сервере. ❖ Кеширование объектов («умная» ссылка). Когда нужно кешировать результаты запросов клиентов и управлять их жизненным циклом. 15
  11. Примеры Doctrine2 использует прокси для реализации магии фреймворка (например, для

    ленивой инициализации), в то время как пользователь работает со своими собственными классами сущностей и никогда не будет использовать прокси. Proxy Manager - библиотека направлена на обеспечение абстракции для создания различных видов прокси-классов. 16
  12. Взаимодействие с другими паттернами ❖ Адаптер предоставляет классу альтернативный интерфейс.

    Декоратор предоставляет расширенный интерфейс. Заместитель предоставляет тот же интерфейс. ❖ Фасад похож на Заместитель тем, что замещает сложную подсистему и может сам её инициализировать. Но в отличие от Фасада, Заместитель имеет тот же интерфейс, что его служебный объект, благодаря чему их можно взаимозаменять. ❖ Декоратор и Заместитель имеют похожие структуры, но разные назначения. Они похожи тем, что оба построены на композиции и делегировании работы другому объекту. Паттерны отличаются тем, что Заместитель сам управляет жизнью сервисного объекта, а обёртывание Декораторов контролируется клиентом. 17
  13. 1. Design Patterns PHP. 2. Шаблоны проектирования с человеческим лицом.

    3. Книга “Паттерны проектирования” Эрик Фримен, Элизабет Фримен. 4. Шаблоны проектирования простым языком. Часть вторая. Структурные шаблоны 5. Паттерны проектирования. 6. Репозиторий с примерами DesignPatternsPHP 7. Книга “Приемы объектно-ориентированного проектирования: паттерны проектирования” Э. Гамма Р. Хелм Р. Джонсон Дж. Влиссидес Литература 19
  14. 21

  15. 22

  16. 23