Контроль качества
Временные упрощения (MVP)
MAY: Допускается для простых проектов:
- Упрощенная feature-based структура без всех слоев FSD
- Отсутствие
widgets/при небольших композициях - Локальная логика в
pages/ - Отсутствие явного
index.tsпри сохранении логического контракта
MUST: Обязате льные ограничения сохраняются даже в MVP:
- Нет циклических зависимостей
- Нет смешивания доменной логики и инфраструктуры
shared/не используется как свалка доменного кода- Импорты между слайсами одного уровня запрещены
Сигналы перехода на полную FSD
Мигрируйте на полную Feature-Sliced Design при появлении:
- Повторно используемые бизнес-сущности
- Рост числа фич, работающих с одними данными
- Появление доменных инвариантов и правил
- Рост команды или параллельная разработка
Контроль и автоматизация
Философия: Архитектурные правила не должны существовать только в документации. Нарушения должны автоматически блокироваться на этапе разраб отки, коммита и CI/CD.
Обязательный контроль
MUST: Обязательно контролировать:
-
✅ Направление зависимостей между слоями
- FORBIDDEN:
featuresимпортирует изpages - FORBIDDEN:
entitiesимпортирует изfeatures - FORBIDDEN:
sharedимпортирует из верхних слоев
- FORBIDDEN:
-
✅ Кросс-импорты между модулями одного слоя
- FORBIDDEN:
features/article-createимпортирует изfeatures/auth - FORBIDDEN:
entities/userимпортирует изentities/article
- FORBIDDEN:
-
✅ Соблюдение 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: Архитектурные нарушения - это ошибки, а не предупреждения. Они исправляются немедленно.