Задонатить и смотреть →
Открой безлимитный доступ к 100+ полезных скринкастов и получай скидки на все предстоящие мероприятия

Повторное использование кода и PSR-7

Мы редко пишем весь проект полностью с нуля. Вместо этого мы активно используем готовые компоненты от других программистов, подключая через Composer. И если у нас несколько проектов, то может возникнуть желание вынести свой код в отдельную библиотеку, чтобы использовать её у себя или даже поделиться публично.

Но если код сильно связан с остальным кодом проекта или фреймворка, то вынести его в отдельную библиотеку весьма сложно. Сегодня мы как раз рассмотрим повторное использование кода и на примере нашей функции покажем способы избавления от лишних связей через инверсию зависимостей. И в итоге для написания переносимого кода перейдём на PSR-7 и совместимые с ним готовые компоненты.

  • 00:00:29 - Повторное использование кода
  • 00:01:55 - Вынос функции в папку
  • 00:04:02 - Подготовка рабочей области
  • 00:04:57 - Анализ зависимостей
  • 00:06:01 - Переход на DTO с данными
  • 00:10:08 - Контракт через интерфейс
  • 00:12:07 - Интерфейсы и тестирование
  • 00:12:43 - Тестирование через стабы
  • 00:14:55 - Тестирование с проверками через моки
  • 00:18:25 - Прямая реализация интерфейса
  • 00:20:14 - Написание адаптера
  • 00:24:29 - Инверсия зависимостей
  • 00:26:29 - Вынесение общих элементов
  • 00:30:37 - Вынос интерфейсов
  • 00:35:27 - Рекомендация PSR-7
  • 00:39:24 - Переход на PSR-7 интерфейсы
  • 00:43:52 - Публикация совместимого кода
  • 00:45:16 - Переход на реализацию Laminas Diactoros
  • 00:50:33 - Смена SapiEmitter
  • 00:53:23 - Кастомные Response
  • 00:55:35 - Жёсткая зависимость от Response
  • 00:57:43 - Обзор результата
Скрытый контент (код, слайды, ...) для подписчиков. Открыть →
Дмитрий Елисеев
elisdn.ru
Комментарии (6)
Андрей

у меня пишет Доступ запрещен Видео недоступно на этом сайте

Сорри все ок

Ответить
Дмитрий Елисеев

Обычно это бывает когда в браузере Firefox включен режим приватности, который не передаёт Referrer.

Ответить
Владимир Перепеченко

Чисто лингвистически не понял про инверсию зависимости:

Вы говорите, что если использовать в project зависимость от library (класс) - это одно направление зависимости (проекта от библиотеки). А если использовать в project интерфейс из library, то это уже инвертированная зависимость.

Как это понимать? Неужели внешняя библиотека стала зависеть от project? Ведь нет: проект продолжает зависеть от библиотеки. Только не от класса из библиотеки, и от интерфейса оттуда же.

Ответить
Дмитрий Елисеев

Мы говорим про разворачивание зависимости от Request:

Раньше библиотека зависела от ServerRequest проекта.
Теперь проект зависит от LangRequest библиотеки.

Ответить
Arunas

спасибо

Ответить
ArtemCat

Спасибо!

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

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

Google
GitHub
Yandex
MailRu