Нарушение баланса Абстрактности и Неустойчивости
ID: abstractness | Степень критичности: Низкая (по умолчанию)
Этот детектор использует метрики «Главной последовательности» Роберта К. Мартина для оценки баланса между устойчивостью (Stability, I) и абстрактностью (Abstractness, A) модуля. Цель состоит в том, чтобы модули находились вблизи «Главной последовательности» — линии, где абстрактность увеличивается по мере роста устойчивости.
Почему это «запах»
- Зона боли (Zone of Pain): Модули, которые очень устойчивы (многие вещи зависят от них), но при этом очень конкретны (отсутствуют абстракции). Их чрезвычайно трудно изменять из-за большого количества зависимых компонентов, но их конкретная природа означает, что они будут нуждаться в изменениях.
- Зона бесполезности (Zone of Uselessness): Модули, которые очень абстрактны (много интерфейсов/абстрактных классов), но при этом очень неустойчивы (никто от них не зависит). Они предоставляют абстракции, которые на самом деле не используются, добавляя ненужную сложность.
Как исправить
- В зоне боли: Введите абстракции (интерфейсы, абстрактные классы), чтобы отделить реализацию модуля от его потребителей.
- В зоне бесполезности: Рассмотрите возможность сделать модуль более конкретным или удалите неиспользуемые абстракции, чтобы упростить код.
Конфигурация
yaml
rules:
abstractness:
severity: mediumПараметры по умолчанию
distance_threshold:0.85- порог отклонения от главной последовательности (0.0 - идеальный баланс, 1.0 - крайнее нарушение)exclude:['**/*.dto.ts', '**/*.interface.ts', '**/*.types.ts']- файлы, которые исключаются из анализа (обычно это сами файлы определений типов)