Мы редко пишем весь проект полностью с нуля. Вместо этого мы активно используем готовые компоненты от других программистов, подключая через 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 - Обзор результата
Скрытый контент (код, слайды, ...) для подписчиков.
Открыть →Чтобы не пропускать новые эпизоды подпишитесь на наш канал @deworkerpro в Telegram
у меня пишет Доступ запрещен Видео недоступно на этом сайте
Сорри все ок
Обычно это бывает когда в браузере Firefox включен режим приватности, который не передаёт Referrer.
Чисто лингвистически не понял про инверсию зависимости:
Вы говорите, что если использовать в project зависимость от library (класс) - это одно направление зависимости (проекта от библиотеки). А если использовать в project интерфейс из library, то это уже инвертированная зависимость.
Как это понимать? Неужели внешняя библиотека стала зависеть от project? Ведь нет: проект продолжает зависеть от библиотеки. Только не от класса из библиотеки, и от интерфейса оттуда же.
Мы говорим про разворачивание зависимости от
Request
:Раньше библиотека зависела от
ServerRequest
проекта.Теперь проект зависит от
LangRequest
библиотеки.спасибо
Спасибо!
Или войти через: