Божественный модуль
ID: god_module | Степень критичности: Высокая (по умолчанию)
«Божественный модуль» (God Module) — это файл, который разросся до слишком больших размеров и взял на себя слишком много обязанностей.
Почему это «запах»
- Нарушает принцип единственной ответственности: Модуль делает слишком много вещей.
- Конфликты слияния: Частые изменения разными разработчиками приводят к постоянным конфликтам.
- Хрупкость: Изменения в одной части модуля могут неожиданно сломать другую часть.
- Сложность тестирования: Требуется сложная настройка для тестирования различных не связанных друг с другом функций.
Критерии обнаружения
archlint идентифицирует Божественные модули на основе:
- Fan-in: Количество других модулей, зависящих от него.
- Fan-out: Количество модулей, от которых зависит он.
- Churn: Частота изменений в git.
Как исправить
- Определите обязанности: Составьте список всех различных задач, которые выполняет модуль.
- Извлеките модули: Разбейте файл на более мелкие, сфокусированные модули.
- Паттерн Фасад: Если модуль выступает в роли координатора, оставьте в нем только логику координации, а работу делегируйте подмодулям.
Конфигурация
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 })