7. Что такое SOLID?
1. Определение
SOLID - это 5 принципов проектирования, которые помогают писать код, устойчивый к изменениям: его проще расширять, тестировать, поддерживать.
S - Single Responsibility Principle (принцип единственной ответственности)
Каждый класс должен отвечать только за одну задачу.
Если класс выполняет сразу несколько функций- он становится хрупким. Любое изменение в одной части может сломать другую.
O - Open/Closed Principle (Принцип открытости/закрытости)
Открыт для расширения:
Поведение кода можно изменить, добавив новые типы или функционал через наследование, интерфейсы или полиморфизм.
Закрыт для изменения:
Исходный код модуля не должен меняться при добавлении новых функций, что важно для продакшена.
L - Liskov Substitution Principle (принцип подстановки Лисков)
Любой дочерний класс должен корректно заменять родительский без изменения поведения программы.
Если подставить наследника вместо базового класса - всё должно работать так же.
I - Interface Segregation Principle (разделение интерфейсов)
Лучше много маленьких интерфейсов, чем один большой.
Класс не должен зависеть от методов, которые он не использует.
Вместо единого интерфейса IMachine с методами Print(), Scan(), Fax(), лучше создать IPrinter, IScanner и IFax
D - Dependency Inversion Principle (инверсия зависимостей)
Высокоуровневые модули не должны быть зависимы от низкоуровневых. Оба должны зависеть от абстракций.
Использование интерфейсов позволяет менять низкоуровневые компоненты без изменений высокоуровневых.
-
Зачем и когда используется:
SOLID становится критически важным, когда проект растёт:
- появляются новые фичи каждую неделю
- над кодом работает несколько разработчиков
- нужно писать тесты
- появляются разные источники данных (БД, API, кэш)
4. Закрепление (простое объяснение)
S — не делай один класс «всем сразу»
O — добавляй новое, не ломая старое
L — наследники должны вести себя нормально
I — не заставляй делать лишнее
D — не привязывайся к конкретным вещам