Суть компонентного фреймворка

Начинаем делать свой удобный HTTP-фреймворк на PHP. От нас не скроется ни один нюанс его работы. Мы исследуем его устройство вдоль и поперёк через написание с нуля каждого компонента.

Сегодня в начале нашего пути дадим определение компонентного HTTP-фреймворка. Рассмотрим место фреймворка и библиотек в потоке управления. Встретим и решим проблему совместимости фреймворков путём использования рекомендаций PSR.

  • 00:00:38 Для чего это нужно
  • 00:02:09 Что такое фреймворк
  • 00:03:40 Использование готового кода
  • 00:04:41 Организация страниц
  • 00:06:31 Запускающий код
  • 00:07:30 Анализ Control Flow
  • 00:09:09 Отличие фреймворка от библиотеки
  • 00:10:39 HTTP-фреймворки и другие
  • 00:12:20 Фреймворк использует библиотеки
  • 00:13:31 Компоненты и пакетные менеджеры
  • 00:17:56 Фреймворконезависимые компоненты
  • 00:19:49 Монолитные и компонентные фреймворки
  • 00:22:26 Легаси монолитных фреймворков
  • 00:23:10 Проблема несовместимости фреймворков
  • 00:24:30 Совместимость через PSR

Заваривайте себе тёплого чая и поехали вместе с нами!

Скрытый контент (код, слайды, ...) для подписчиков. Открыть →
Дмитрий Елисеев
elisdn.ru
Комментарии (23)
Игорь
2021-10-19 21:13

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

Сейчас начинаю переписывать активно растущее легаси приложение для обязательной маркировки. Эта серия уроков будет очень кстати.

Ответить
Руслан
2021-10-20 06:45

Спасибо!

Ответить
Михаил
2021-10-20 14:01

А по slim уроки пока не будут выходить?

Ответить
Дмитрий Елисеев
2021-10-20 18:38

Будут

Ответить
Андрей
2021-10-20 18:27

Спасибо, очень ждал этот курс!

Ответить
iEXTRO
2021-10-21 00:39

Отличный контент, из других видео узнал для себя много нового и интересного. Жду следующие видео данного курса. Спасибо за вашу работу

Ответить
slo_nik
2021-10-21 11:34

Добрый день.

Отлично, жду продолжения.

Ответить
Алексей
2021-10-21 11:36

Спасибо! ждем следующих эпизодов.

Ответить
Евгений
2021-10-23 10:51

Спасибо! Все по полочкам.

Ответить
Arunas
2021-10-24 09:29

Спасибо, liuks!

Ответить
Владимир Перепеченко
2021-10-27 16:11

Рад что долждался обновленного курса.

Инересно почему в качестве образца выбрали Мецио, а не SLIM ? Ведь именно слим Вы используете в других кастах..

Ответить
Дмитрий Елисеев
2021-10-29 09:50

Потому что только в версии 4.0 от 2019-ого года Slim избавился от жёстких зависимостей и трейтов.

А в момент записи тех скринкастов в 2017-ом году независимым был только Zend Expressive, который сейчас переименовали в Mezzio.

Ответить
Владимир Перепеченко
2021-11-03 20:38

Про 2019 год понятно, а вот сейчас то, в 2021 почему Zend, а не Slim?

И кстати, Дмитрий, нет ли у Вас материала на такую холиварную тему: почему трейты - плохо ? Я лично пока не понял, где они могут помешать.

Ответить
Дмитрий Елисеев
2021-11-11 08:16

Про 2019 год понятно, а вот сейчас то, в 2021 почему Zend, а не Slim?

Для разнообразия.

Ответить
Дмитрий Елисеев
2021-11-11 09:02

Почему трейты - плохо? Я лично пока не понял, где они могут помешать.

Когда программисты в ООП узнают про наследование, многие им начинают злоупотреблять, делая длинные цепочки, наследуя все подряд классы друг от друга, где обычно класс студента наследуется от класса человека:

  A
  |
  B
 / \
C   D

И как-то в C++ сделали множественное наследование классов. Потом оказалось, что с ним программисты сочиняют из классов ещё более невообразимые шедевры:

A  B C
 \ //\
  D - E
 / \/\/
F  G  H

где собака наследуются от табуретки (так как четыре ноги) и радиатора (так как тоже тёплая).

Получилась жёсткосвязанная система. Чтобы понять, какие методы унаследовались и перекрыли друг друга в классе G нужно просидеть целый день. И мелкое изменение метода в классе B может сломать половину проекта.

В итоге во всех последующих языках вроде Java и PHP от множественного наследования реализации (классов) отказались. Оставили только использование интерфейсов. И вообще единичное наследование посоветовали использовать только в крайних случаях. А остальное делать композицией или агрегацией.

Почему трейты - плохо?

Если рассматривать архитектуру в общем, то:

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

Хорошо - это декомпозиция на узкоспециализированные классы, реализующие интерфейсы как контракты, композиция вместо наследования.

Я лично пока не понял, где они могут помешать.

И вот однажды в PHP от одного джентльмена прилетело предложение сделать трейты, чтобы обойти ограничение единственного наследования. И понеслось...

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

Так что плохо - это не сами трейты, а то, что с их помощью часто делают плохие вещи.

Ответить
Владимир Перепеченко
2021-11-14 09:42

Прекрасный ответ !!

Ответить
Дмитрий
2022-02-08 19:49

Божественно, надо перевести на англ и вставить в конфлюенс 72м шрифтом, чтоб коллеги даже из европы видели. Благодарю

Ответить
Фарух
2021-12-18 17:20

Nginx (pronounced "engine X" /ˌɛndʒɪnˈɛks/ EN-jin-EKS)

Давайте произносить правильно: ЭнжинЭКС, а НЕ ИнДжинкс

Ответить
Виталий
2023-11-07 08:41

Здравствуйте, хотелось бы уточнить один момент. В этом видео Вы называете (например, Mailer и DB) компонентами, которые вызывает либо наш код, либо сам фреймворк. Далее Вы предлагаете их называть библиотеками. Но уже в разделе "компоненты и пакетные менеджеры", Вы разделяете эти понятия. В общем-то, это я и хотел уточнить. Какую разницу вы подразумеваете между компонентом и библиотекой? А то я не могу понять, это по сути синонимы и Вы так говорите просто для удобства или Вы все-таки подразумеваете, что разница есть в этих терминах.

Ответить
Дмитрий Елисеев
2024-07-29 15:31

Через пакетные менеджеры мы загружаем компоненты. Они внутри могут быть фреймворками или библиотеками. Так что компонент – это обобщающее название для всего этого.

Ответить
Виталий
2024-08-05 08:51

Спасибо

Ответить
Иван
2024-06-20 18:03

Дмитрий, добрый день! Подскажите пожалуйста, с какого уровня можно работать с материалом? Если могу в процедурку, понимаю синтаксис и общие концепции ООП, но не делал сайты на CMS, можно уже?

Ответить
Дмитрий Елисеев
2024-07-29 18:27

Можно с любого. Здесь объяснение почти всего с нуля.

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

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

Yandex
MailRu
GitHub
Google