Skip to content

Нарушение баланса Абстрактности и Неустойчивости

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'] - файлы, которые исключаются из анализа (обычно это сами файлы определений типов)

Released under the MIT License.