Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про PHP: solid, single responsibility, design

Single Responsibility Principle — как определить, что класс нарушает принцип единственной ответственности (количество методов, разные DTO на выходе)?

Этот вопрос проверяет понимание признаков нарушения принципа единственной ответственности в классах.

Короткий ответ

Класс нарушает SRP, когда он выполняет несколько несвязанных задач или отвечает за несколько аспектов системы. Признаки нарушения включают большое количество методов, разные типы DTO на выходе, частые изменения по разным причинам. Если класс меняется из-за изменений в разных бизнес-процессах или его методы работают с разными данными — это явный сигнал о нарушении принципа.

Длинный ответ

Принцип единственной ответственности (SRP) гласит, что класс должен иметь только одну причину для изменения. Нарушение этого принципа можно определить по нескольким четким признакам.

Признаки нарушения SRP:

  1. Количество и разнообразие методов:

    • Класс имеет слишком много методов (10+)

    • Методы выполняют несвязанные функции

    • Отсутствие четкой группировки ответственностей

  2. Разные DTO на выходе:

    • Класс возвращает различные типы данных

    • Методы формируют ответы для разных клиентов

    • Отсутствие единой цели преобразования данных

  3. Частые изменения:

    • Класс меняется по разным причинам

    • Изменения в одной части влияют на несвязанные функции

    • Высокая связанность с разными модулями системы

Пример нарушения:

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 { /* ... */ }

Метрики оценки:

  • Одна причина для изменения

  • Логическая целостность методов

  • Единый уровень абстракции

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    6

Навыки

  • PHP

    PHP

Ключевые слова

#solid

#single responsibility

#design

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.