В данном занятии курса “Otus PHP Professional“ мы продолжим рассматривать популярные паттерны проектирования: Стратегия, .

О занятии

Цели занятия

  • находить в коде паттерны; понимать и применять их.

Краткое содержание

  • продолжаем изучать паттерны проектирования с примерами

Результаты

  • знание паттернов проектирования.

Преподаватель

  • Михаил Каморин

  • дата лекции: 11.04.2022

/**/


Тезисы из вебинара

(звезда) Запись вебинара: https://play.boomstream.com/1K4UXVGB

Цели занятия

Карта курса

Модуль Developing

Возможные нарушения SOLID при применении паттернов

(звезда) паттерны могут нарушать принципы SOLID

Примеры нарушений SOLID

Паттерны проектирования (часть 2)

(звезда) Первая часть с обзором паттернов — тут


Паттерн “Стратегия”

(звезда) Выполнение определенных операций над данными в зависимости от контекста — выбирается нужный интерфейс для обработки.

(звезда) Бывает статическая и динамическая стратегия:

  • Статическая: предопределена заранее (по внешним признакам)

  • Динамическая: определяется на ходу (по входным параметрам)

Пример:

Пример кода: сортировка списка новостей разными способами (через компараторы)

Компараторы:

Клиентский код:

(звезда) здесь if/else нарушают принцип “Open-closed“; лучше здесь использовать способ №2, с подстановкой имени из параметров:


Паттерн “Наблюдатель”

Пример:

(звезда) проще использовать готовый SplObserver: https://www.php.net/manual/en/class.splobserver.php

Page.php

Интерфейс наблюдателя — ObserverInterfacephp

Добавляем Observer в News.php


Паттерн “Абстрактная фабрика”

(звезда) Отличие от паттерна Стратегия: здесь на выходе что-то создается (объекты)

Пример:

Базовый класс Article.php

HtmlFactory.php

RssFactory.php

Run.php | клиентский код

(warning) Т.е. суть в том, что мы далее передаем Фабрику в качестве аргументов и она там создает объекты нужного класса

(минус) Риски:


Паттерн “Компоновщик“

Пример : форма, которую надо наполнить полями

FieldComposte.php

FieldSet.pp

Index.php : Клиентский код: наполнение формы инпутами

(минус) Проблемы:


Паттерн Декоратор (структурный)

Примеры использования:

  • использование кеша вместо БД,

  • любое логирование в ходе операций

  • (звезда) из жизни: добавление сиропов и др. в готовую чашку кофе

Пример:

(звезда) Будем выполнять определенные манипуляции над текстом статьи (м.б. также реализовано через паттерн “Цепочка ответственности“, для примера ниже — даже лучше, т.к. в Декораторе не явно определен порядок применения операций)

InputFormat.php

Клиентский код: Index.php

(минус) Проблемы:


Паттерн Фасад

Пример использования

Пример: фасад для видеохостингов

Класс Youtube.php

Нарушения при использовании паттернов


Мой отзыв о лекции

Прошлая лекция была перегружена — эта наоборот, нужно сбалансировать объемы двух лекций.

Подписи к схемам паттернов лучше перевести на русский язык.

Может быть еще добавить примеры паттернов из жизни (для понимания), как это сделано в курсе Швеца.


Дополнительные материалы


Домашнее задание

Цель:

  • Набор задач на реализацию изученных паттернов. Требуется решить минимум 5 задач.

Описание/пошаговая инструкция выполнения домашнего задания:

  1. Выберите пять из 12 паттернов:

  2. Абстрактная фабрика

  3. Адаптер

  4. Декоратор

  5. Инверсия зависимости

  6. Фабричный метод

  7. Итератор

  8. Маппер

  9. Наблюдатель

  10. Прокси

  11. Прототип

  12. Стратегия

  13. Посетитель

  14. Запросите задачи у преподавателя

  15. Реализуйте паттерн на базе предложенного кода.

Результат: прототип кода решения задач на паттернах

Критерии оценки:

  • Каждый паттерн — 2 балла

  • Реализация должна соответствовать определению паттерна, DRY, KISS, SOLID.

Рекомендуем сдать до: 20.04.2022

Tags

Нет комментариев

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.