В данном занятии курса “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
| клиентский код
Т.е. суть в том, что мы далее передаем Фабрику в качестве аргументов и она там создает объекты нужного класса
Риски:
Паттерн “Компоновщик“
Пример : форма, которую надо наполнить полями
FieldComposte.php
FieldSet.pp
Index.php
: Клиентский код: наполнение формы инпутами
Проблемы:
Паттерн Декоратор (структурный)
Примеры использования:
-
использование кеша вместо БД,
-
любое логирование в ходе операций
-
из жизни: добавление сиропов и др. в готовую чашку кофе
Пример:
Будем выполнять определенные манипуляции над текстом статьи (м.б. также реализовано через паттерн “Цепочка ответственности“, для примера ниже — даже лучше, т.к. в Декораторе не явно определен порядок применения операций)
InputFormat.php
Клиентский код: Index.php
Проблемы:
Паттерн Фасад
Пример использования
Пример: фасад для видеохостингов
Класс Youtube.php
Нарушения при использовании паттернов
Мой отзыв о лекции
Прошлая лекция была перегружена — эта наоборот, нужно сбалансировать объемы двух лекций.
Подписи к схемам паттернов лучше перевести на русский язык.
Может быть еще добавить примеры паттернов из жизни (для понимания), как это сделано в курсе Швеца.
Дополнительные материалы
-
Швец. курс по рефакторингу https://refactoring.guru/ru
-
https://github.com/kamranahmedse/design-patterns-for-humans/blob/master/README.md
-
Исходники из примеров выше — тут: https://github.com/nujensait/phpexp/tree/main/Courses/otus_php_pro/19_patterns2
Домашнее задание
Цель:
-
Набор задач на реализацию изученных паттернов. Требуется решить минимум 5 задач.
Описание/пошаговая инструкция выполнения домашнего задания:
-
Выберите пять из 12 паттернов:
-
Абстрактная фабрика
-
Адаптер
-
Декоратор
-
Инверсия зависимости
-
Фабричный метод
-
Итератор
-
Маппер
-
Наблюдатель
-
Прокси
-
Прототип
-
Стратегия
-
Посетитель
-
Запросите задачи у преподавателя
-
Реализуйте паттерн на базе предложенного кода.
Результат: прототип кода решения задач на паттернах
Критерии оценки:
-
Каждый паттерн — 2 балла
-
Реализация должна соответствовать определению паттерна, DRY, KISS, SOLID.
Рекомендуем сдать до: 20.04.2022
Нет комментариев