Что такое SOLID
Что проверяют
Понимаете ли вы смысл каждого принципа и не превращаете ли их в догму.
Как отвечать
Пять принципов проектирования, помогающих сделать код устойчивым к изменениям.
Единственная ответственность. У модуля должна быть одна причина для изменения. Формулировка про «делать одно дело» неточна: речь про источник требований. Класс, который меняется и при изменении правил расчёта, и при изменении формата отчёта, нарушает принцип, потому что его правят две разные группы людей по разным поводам.
Открытость и закрытость. Поведение расширяется без изменения существующего кода. На практике это означает точки расширения там, где изменения ожидаются: новый способ оплаты добавляется новой реализацией, а не ещё одной веткой в общем условии.
Подстановка Лисков. Наследник должен быть пригоден везде, где ожидается базовый тип, не ломая ожиданий вызывающего. Нарушения выглядят так: наследник бросает исключение там, где базовый класс работает, или сужает допустимые входные данные. Хрестоматийный пример это квадрат, унаследованный от прямоугольника: установка ширины неожиданно меняет и высоту.
Разделение интерфейсов. Лучше несколько узких интерфейсов, чем один широкий. Клиент не должен зависеть от методов, которые ему не нужны, иначе изменение чужой части заставляет его перекомпилироваться и переписывать заглушки в тестах.
Инверсия зависимостей. Модули верхнего уровня не зависят от нижних, оба зависят от абстракций. Практически это означает, что интерфейс объявлен там, где он используется, а не там, где реализован. Именно на этом держится слоистая архитектура, где домен не знает про базу.
Обязательная оговорка: это ориентиры, а не закон. Буквальное применение к каждому классу даёт россыпь интерфейсов с одной реализацией и слои, через которые вызов проходит транзитом. Принципы вводят там, где изменение действительно ожидается.
Где спотыкаются
Пересказывают формулировки, не приводя примеров.
Понимают первый принцип как «один класс это один метод».
Заводят интерфейс на каждый класс ради инверсии зависимостей.
Не могут объяснить, чем нарушение принципа подстановки вредит на практике.