Этот вопрос рассматривает конкретные метрики и признаки, помогающие выявить нарушение принципа единственной ответственности.
Основные метрики нарушения SRP включают количество методов (более 7-10 указывает на проблему), разные уровни абстракции в одном классе (работа с БД и форматирование вывода), множество "актёров" — разных пользователей класса, которые требуют изменений по разным причинам. Также важны частые изменения класса и высокая связность с разными модулями системы.
Для объективной оценки соблюдения SRP можно использовать несколько конкретных метрик, которые помогают выявить проблемы в дизайне классов.
Ключевые метрики нарушения SRP:
Количество методов:
7-10+ методов в классе
Отсутствие четкой тематической группировки
Методы с разными целями и уровнями сложности
Уровни абстракции:
Смешение высокоуровневой и низкоуровневой логики
Одновременная работа с бизнес-правилами и техническими деталями
Отсутствие единого уровня детализации
Множество актёров:
Разные пользователи класса (модули, команды)
Изменения требуются по разным бизнес-причинам
Класс служит нескольким независимым целям
Пример анализа класса:
class OrderProcessor {
// Актёр 1: Менеджер заказов
public function validateOrder() { /* ... */ }
public function calculateTotal() { /* ... */ }
// Актёр 2: Бухгалтерия
public function generateInvoice() { /* ... */ }
public function applyTaxes() { /* ... */ }
// Актёр 3: Склад
public function updateInventory() { /* ... */ }
public function generateShippingLabel() { /* ... */ }
}Дополнительные метрики:
Коэффициент связности: Количество зависимостей класса
Частота изменений: Как часто класс меняется по разным причинам
Размер класса: Количество строк кода (200+ может указывать на проблему)
Практическое применение:
Регулярный ревью кода с проверкой метрик
Рефакторинг при превышении пороговых значений
Использование статических анализаторов