Skip to content

Божественный модуль

ID: god_module | Степень критичности: Высокая (по умолчанию)

«Божественный модуль» (God Module) — это файл, который разросся до слишком больших размеров и взял на себя слишком много обязанностей.

Почему это «запах»

  • Нарушает принцип единственной ответственности: Модуль делает слишком много вещей.
  • Конфликты слияния: Частые изменения разными разработчиками приводят к постоянным конфликтам.
  • Хрупкость: Изменения в одной части модуля могут неожиданно сломать другую часть.
  • Сложность тестирования: Требуется сложная настройка для тестирования различных не связанных друг с другом функций.

Критерии обнаружения

archlint идентифицирует Божественные модули на основе:

  • Fan-in: Количество других модулей, зависящих от него.
  • Fan-out: Количество модулей, от которых зависит он.
  • Churn: Частота изменений в git.

Как исправить

  1. Определите обязанности: Составьте список всех различных задач, которые выполняет модуль.
  2. Извлеките модули: Разбейте файл на более мелкие, сфокусированные модули.
  3. Паттерн Фасад: Если модуль выступает в роли координатора, оставьте в нем только логику координации, а работу делегируйте подмодулям.

Конфигурация

yaml
rules:
  god_module:
    severity: high # или medium / low / off
    fan_in: 10 # По умолчанию: 10
    fan_out: 10 # По умолчанию: 10
    churn: 20 # По умолчанию: 20
    exclude: [] # Исключить файлы

ESLint правило

Этот детектор доступен как правило ESLint для получения обратной связи в реальном времени.

javascript
// eslint.config.js
export default [
  {
    rules: {
      '@archlinter/no-god-modules': 'warn',
    },
  },
];

Смотрите Интеграция с ESLint для инструкций по настройке.

Параметры по умолчанию

  • fan_in: 10 - минимальное количество модулей, зависящих от данного модуля
  • fan_out: 10 - минимальное количество модулей, от которых зависит данный модуль
  • churn: 20 - минимальное количество изменений файла в git (требует git: { enabled: true })

Released under the MIT License.