Перейти к основному содержимому

Контроль качества

Временные упрощения (MVP)

MAY: Допускается для простых проектов:

  • Упрощенная feature-based структура без всех слоев FSD
  • Отсутствие widgets/ при небольших композициях
  • Локальная логика в pages/
  • Отсутствие явного index.ts при сохранении логического контракта

MUST: Обязательные ограничения сохраняются даже в MVP:

  • Нет циклических зависимостей
  • Нет смешивания доменной логики и инфраструктуры
  • shared/ не используется как свалка доменного кода
  • Импорты между слайсами одного уровня запрещены

Сигналы перехода на полную FSD

Мигрируйте на полную Feature-Sliced Design при появлении:

  • Повторно используемые бизнес-сущности
  • Рост числа фич, работающих с одними данными
  • Появление доменных инвариантов и правил
  • Рост команды или параллельная разработка

Контроль и автоматизация

Философия: Архитектурные правила не должны существовать только в документации. Нарушения должны автоматически блокироваться на этапе разработки, коммита и CI/CD.

Обязательный контроль

MUST: Обязательно контролировать:

  1. Направление зависимостей между слоями

    • FORBIDDEN: features импортирует из pages
    • FORBIDDEN: entities импортирует из features
    • FORBIDDEN: shared импортирует из верхних слоев
  2. Кросс-импорты между модулями одного слоя

    • FORBIDDEN: features/article-create импортирует из features/auth
    • FORBIDDEN: entities/user импортирует из entities/article
  3. Соблюдение Public API

    • MUST: Импорты только из корня модуля
    • FORBIDDEN: Глубокие импорты (@/entities/article/ui/article-card)

Запрещенные практики

FORBIDDEN: Следующие практики должны автоматически блокироваться:

// ❌ ЗАПРЕЩЕНО: feature → feature
// features/article-create/model/use-article-form.ts
import { uploadImage } from '@/features/image-upload'; // Блокируется

// ❌ ЗАПРЕЩЕНО: entities → features
// entities/article/lib/get-article-url.ts
import { routes } from '@/features/routing'; // Блокируется

// ❌ ЗАПРЕЩЕНО: shared → entities
// shared/lib/helpers.ts
import { Article } from '@/entities/article'; // Блокируется

// ❌ ЗАПРЕЩЕНО: глубокий импорт
import { ArticleCard } from '@/entities/article/ui/article-card'; // Блокируется

// ✅ РАЗРЕШЕНО: через Public API
import { ArticleCard } from '@/entities/article'; // OK

Инструменты контроля

MUST: Обязательно использовать:

  • eslint-plugin-boundaries - для контроля зависимостей между слоями
  • Настройка TypeScript paths для алиасов импортов (@/entities/*, @/features/*, и т.д.)

MUST: Требования к проверкам:

  • Нарушения архитектурных правил блокируют сборку
  • FORBIDDEN: Игнорировать ошибки как warnings

Обработка нарушений

MUST: Нарушения архитектурных правил должны:

  • ❌ Блокировать коммит (через pre-commit hook)
  • ❌ Блокировать сборку в CI/CD
  • ❌ Блокировать merge PR

FORBIDDEN: Нарушения не могут:

  • ⛔ Игнорироваться через // eslint-disable
  • ⛔ Обходиться через any или @ts-ignore
  • ⛔ Откладываться "на потом"

MUST: Архитектурные нарушения - это ошибки, а не предупреждения. Они исправляются немедленно.