18 | SOLID: основные принципы для чистой и расширяемой ООП‑архитектуры
Разбираем пять принципов SOLID: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation и Dependency Inversion. История происхождения, практические примеры (логирование, платежи, модели в Laravel), типичные нарушения и способы их исправления (фабрики, конфигурации, интерфейсы, DI). Подходит для разработчиков, желающих писать тестируемый, гибкий и поддерживаемый код. Таймкоды: 00:00:03 — Введение: что такое SOLID и зачем он нужен 00:01:44 — История: Роберт Мартин (Uncle Bob) и происхождение аббревиатуры 00:02:40 — Почему SOLID важен: управление зависимостями и поддерживаемость 00:04:07 — Структура: перечень пяти принципов 00:07:34 — SRP: принцип единственной ответственности — суть и примеры 00:10:00 — Практическое применение SRP: тестируемость, разделение отправки данных 00:11:28 — Автотестирование: отделение данных и логики отправки 00:12:14 — Проблемы моделей в Laravel: ActiveRecord vs разделённая архитектура 00:13:08 — Предостережение: избыточное разделение 00:14:00 — Примеры нарушения SRP в ActiveRecord и преимущества Doctrine/Symfony 00:15:50 — Логирование: гибкость, обработчики и разделение ответственности 00:19:50 — OCP: открытость/закрытость — идея и признаки нарушения 00:21:49 — Пример нарушения OCP: добавление нового метода оплаты 00:23:22 — Недостатки старого подхода: жёсткие зависимости в контроллере 00:24:20 — Проблемы: трудности с добавлением новых платёжных методов 00:25:19 — Новый подход: конфигурация + фабрика для обработчиков 00:26:16 — Реализация: фабрика создаёт экземпляры по конфигу 00:27:05 — Преимущества: расширяемость через конфигурацию 00:28:05 — DIP: принцип инверсии зависимостей — зачем и как 00:29:18 — DIP детальнее: верхний уровень не должен зависеть от низшего 00:30:15 — Зависимость от абстракций: интерфейсы вместо конкретных классов 00:31:14 — Проблемы прямой зависимости на примере кнопки и мотора 00:32:09 — Практическая реализация DIP: интерфейсы/протоколы 00:35:00 — LSP: подстановка Барбары Лисков — суть 00:36:54 — Пример нарушения LSP: неподходящие абстракции и `exchange` 00:38:40 — Решение: выделение интерфейсов и ограничение принимаемых типов 00:39:40 — Дополнительно: финализация методов для стабильности поведения 00:41:37 — Интерфейсы для тестирования: почему они облегчают мокинг 00:42:45 — Преимущества интерфейсов: гибкость создания объектов 00:44:50 — Общие рекомендации: разделение интерфейсов, примеры с валютами 00:47:41 — Практическое применение SOLID: баланс между абстракцией и простотой 00:49:53 — Итог: важность разделения ответственности в MVC и архитектуре
Разбираем пять принципов SOLID: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation и Dependency Inversion. История происхождения, практические примеры (логирование, платежи, модели в Laravel), типичные нарушения и способы их исправления (фабрики, конфигурации, интерфейсы, DI). Подходит для разработчиков, желающих писать тестируемый, гибкий и поддерживаемый код. Таймкоды: 00:00:03 — Введение: что такое SOLID и зачем он нужен 00:01:44 — История: Роберт Мартин (Uncle Bob) и происхождение аббревиатуры 00:02:40 — Почему SOLID важен: управление зависимостями и поддерживаемость 00:04:07 — Структура: перечень пяти принципов 00:07:34 — SRP: принцип единственной ответственности — суть и примеры 00:10:00 — Практическое применение SRP: тестируемость, разделение отправки данных 00:11:28 — Автотестирование: отделение данных и логики отправки 00:12:14 — Проблемы моделей в Laravel: ActiveRecord vs разделённая архитектура 00:13:08 — Предостережение: избыточное разделение 00:14:00 — Примеры нарушения SRP в ActiveRecord и преимущества Doctrine/Symfony 00:15:50 — Логирование: гибкость, обработчики и разделение ответственности 00:19:50 — OCP: открытость/закрытость — идея и признаки нарушения 00:21:49 — Пример нарушения OCP: добавление нового метода оплаты 00:23:22 — Недостатки старого подхода: жёсткие зависимости в контроллере 00:24:20 — Проблемы: трудности с добавлением новых платёжных методов 00:25:19 — Новый подход: конфигурация + фабрика для обработчиков 00:26:16 — Реализация: фабрика создаёт экземпляры по конфигу 00:27:05 — Преимущества: расширяемость через конфигурацию 00:28:05 — DIP: принцип инверсии зависимостей — зачем и как 00:29:18 — DIP детальнее: верхний уровень не должен зависеть от низшего 00:30:15 — Зависимость от абстракций: интерфейсы вместо конкретных классов 00:31:14 — Проблемы прямой зависимости на примере кнопки и мотора 00:32:09 — Практическая реализация DIP: интерфейсы/протоколы 00:35:00 — LSP: подстановка Барбары Лисков — суть 00:36:54 — Пример нарушения LSP: неподходящие абстракции и `exchange` 00:38:40 — Решение: выделение интерфейсов и ограничение принимаемых типов 00:39:40 — Дополнительно: финализация методов для стабильности поведения 00:41:37 — Интерфейсы для тестирования: почему они облегчают мокинг 00:42:45 — Преимущества интерфейсов: гибкость создания объектов 00:44:50 — Общие рекомендации: разделение интерфейсов, примеры с валютами 00:47:41 — Практическое применение SOLID: баланс между абстракцией и простотой 00:49:53 — Итог: важность разделения ответственности в MVC и архитектуре
