Рефакторинг сеттеров и интерфейсов

Открываем новую рубрику практического рефакторинга. Сегодня у нас разбор кода компонента OAuth 2.0 Server. Сделаем форк репозитория и настроим локальный запуск тестов перед отправкой Pull Request.

Займёмся упрощением кода сервера. Найдём и устраним избыточность интерфейсов. Удалим неиспользуемый код. Увидим неудобство наличия сеттеров в сервисе и рассмотрим способы избавления от них. Избавимся от зависимости от конкретного класса путём внедрения интерфейса. И сделаем интерфейсы компактными.

  • 00:00:35 Примут или нет Pull Request
  • 00:02:32 Делаем Fork и клонируем
  • 00:04:25 Подключение upstream
  • 00:07:12 Локальный запуск
  • 00:10:12 Рабочая версия PHP
  • 00:11:52 Обзор компонента
  • 00:16:33 Формирование ответов
  • 00:18:51 Неудобство кода с сеттерами
  • 00:20:38 Формирование редиректов
  • 00:22:16 Избыточность интерфейса
  • 00:23:27 Разделение интерфейсов
  • 00:25:39 Устройство сервера ресурсов
  • 00:29:51 Неиспользуемые параметры
  • 00:31:36 Упрощение создания валидатора
  • 00:34:39 Скрытая неожиданность
  • 00:36:45 Альтернативы промежуточных сеттеров
  • 00:39:36 Интерфейс для сеттера
  • 00:44:45 Верить ли процентам тестового покрытия
  • 00:49:00 Обзор результата
Скрытый контент (код, слайды, ...) для подписчиков. Открыть →
Дмитрий Елисеев
elisdn.ru
Комментарии (10)
Руслан
2021-05-07 13:53

Спасибо!

Ответить
Владимир
2021-05-16 10:00

Очень полезно, спасибо

Ответить
d.arnautov
2021-08-12 14:36

Спасибо, полезный материал

Ответить
Андрей
2022-03-10 08:41

Дмитрий, подскажите пожалуйста, а почему мы не можем из объекта доставать константу прямым путем, а только через метод геттер? Я от коллег слышал что это правильный подход, но не получил информации от том почему нельзя доставать напрямую.

Ответить
Дмитрий Елисеев
2022-03-11 08:33

Здесь стоит разобраться, зачем одному объекту понадобилась чужая константа из другого объекта.

Можете привести пример?

Ответить
Андрей
2022-03-11 09:38
$branch = BranchFactory::createBranch($authUser, $stepsCompletedField);

$this->branchName = $branch::BRANCH_NAME; 

Сказали, что так делать дурно, но я хотел услышать более конкретные аргументы.

Ответить
Дмитрий Елисеев
2022-03-13 14:49

Выигрыша по сравнению с вызовом $branch->getName() здесь никакого нет.

А из неудобств это только добавляет лишнюю мороку с определением константы в интерфейсе и возможные проблемы с подменой значения константы для стаба или мока в юнит-тестах.

Ответить
Андрей
2022-03-13 16:17

Спасибо

Ответить
kekc
2022-08-08 16:42

было бы здорово запоминать выбранное разрешение и скорость...утомительно каждый раз переключать :-\

Ответить
gfdgdf
2023-09-04 11:10

00:39 это и есть реализация принципа interface segregation из SOLID. спасибо большое

Ответить
Зарегистрируйтесь или войдите чтобы оставить комментарий

Или войти через:

Yandex
MailRu
GitHub
Google
  • 1Рефакторинг сеттеров и интерфейсов