Проверяет глубокое понимание и применение пяти принципов качественного дизайна.
SOLID объединяет пять принципов:
SRP (Single Responsibility) — класс отвечает за одну задачу (например, разделить логику валидации от сохранения).
OCP (Open/Closed) — расширять поведение через наследование или композицию без изменения существующего кода (добавить новый тип обработки, не правя базовый класс).
LSP (Liskov Substitution) — подкласс должен заменять базовый без нарушений (метод Rectangle.SetWidthHeight не должен ломать Square).
ISP (Interface Segregation) — маленькие интерфейсы, клиенты не должны зависеть от ненужных методов (IReadable, IWritable вместо IReadWrite).
DIP (Dependency Inversion) — зависеть от абстракций, а не от конкретных реализаций (внедрять ILogger, а не FileLogger).
SRP: Вынесли логирование в отдельный сервис ILogger.
OCP: Для расчёта скидок использовали IDiscountStrategy, добавляя новые стратегии без правок в OrderService.
LSP: Реализовали IShape так, чтобы Circle и Square не нарушали ожидаемое поведение GetArea().
ISP: Разделили IReportGenerator на IPdfReportGenerator и IExcelReportGenerator.
DIP: Внедряли IUserRepository через конструктор, а не создавали new UserRepository() внутри сервисов.