Этот вопрос проверяет понимание признаков нарушения принципа единственной ответственности в классах.
Класс нарушает SRP, когда он выполняет несколько несвязанных задач или отвечает за несколько аспектов системы. Признаки нарушения включают большое количество методов, разные типы DTO на выходе, частые изменения по разным причинам. Если класс меняется из-за изменений в разных бизнес-процессах или его методы работают с разными данными — это явный сигнал о нарушении принципа.
Принцип единственной ответственности (SRP) гласит, что класс должен иметь только одну причину для изменения. Нарушение этого принципа можно определить по нескольким четким признакам.
Признаки нарушения SRP:
Количество и разнообразие методов:
Класс имеет слишком много методов (10+)
Методы выполняют несвязанные функции
Отсутствие четкой группировки ответственностей
Разные DTO на выходе:
Класс возвращает различные типы данных
Методы формируют ответы для разных клиентов
Отсутствие единой цели преобразования данных
Частые изменения:
Класс меняется по разным причинам
Изменения в одной части влияют на несвязанные функции
Высокая связанность с разными модулями системы
Пример нарушения:
class UserManager {
public function createUser($data) { /* ... */ }
public function sendWelcomeEmail($user) { /* ... */ }
public function generateUserReport($user) { /* ... */ }
public function validateUserData($data) { /* ... */ }
public function backupUserData($user) { /* ... */ }
}Как исправить:
class UserCreator { /* ... */ }
class EmailSender { /* ... */ }
class ReportGenerator { /* ... */ }
class DataValidator { /* ... */ }
class BackupService { /* ... */ }Метрики оценки:
Одна причина для изменения
Логическая целостность методов
Единый уровень абстракции