Введение в FDA
FDA (Fractal Domain Architecture) — архитектурный подход для приложений на мета-фреймворках (SvelteKit, Next.js, Nuxt), который организует код вокруг бизнес-доменов, а не вокруг технических типов файлов. Внутри каждого домена — одинаковый набор слоёв и файлов с предсказуемыми ролями, и эта структура повторяется от компонента до всего приложения.
🏗️ Зачем нужна ещё одна архитектура
Заголовок раздела «🏗️ Зачем нужна ещё одна архитектура»Почти каждый проект начинается одинаково: пара страниц, общая папка components/, utils/, hooks/. Пока страниц пять — это удобно. А когда их пятьдесят, начинается знакомая многим история:
- «Где живёт логика корзины?» — везде: компонент в
components/, запрос вapi/, валидация вutils/, типы вtypes/. Изменение одной фичи требует правок в шести папках. - Новый разработчик не может найти код: структура не подсказывает, корзина — это
CartWidget.svelte?useCart.ts?cart.service.ts? - Переиспользуемое смешалось с доменным:
Button.svelteлежит рядом сCheckoutForm.svelte, и непонятно, что можно трогать, а что сломает корзину.
Корень проблемы — организация вокруг технических типов. FDA разворачивает её вокруг бизнеса: код живёт в доменах — auth, cart, dashboard — и у каждого домена одинаковая внутренняя структура. Вопрос «где лежит логика корзины» получает ответ из одного слова: src/routes/cart/.
🧱 Четыре принципа
Заголовок раздела «🧱 Четыре принципа»1. Фрактальность. Одинаковая структура повторяется на всех уровнях: компонент → субдомен → домен → приложение. Открыв любой модуль FDA-проекта, вы уже знаете, где искать модель, а где — разметку. Навигация по проекту перестаёт быть навыком и становится рефлексом.
2. Разделение на слои. Внутри домена данные проходят один и тот же путь: репозиторий → модель → RPC → контроллер → UI. Каждый слой знает только о соседних нижних. Это защищает от двух классических бед: серверного кода в клиентском бандле (да, NextJS?🤭) и бизнес-логики в разметке.
3. Явные контракты. Каждый файл имеет одну роль и один набор экспортов: model.server.ts — только операции с данными, types.ts — только типы. Ревью ускоряется, потому что нарушение бросается в глаза, а агентам-ассистентам проще генерировать корректный код в изолированной среде.
4. Framework-agnostic. Правила не привязаны к конкретному метафреймворку: SvelteKit, Next.js и Nuxt отличаются именами файлов роутинга, а слои и контракты остаются теми же. Опыт и код доменов переносимы между фреймворками.
🚀 Для каких проектов подходит
Заголовок раздела «🚀 Для каких проектов подходит»FDA рассчитана на приложения среднего и большого размера: дашборды, e-commerce, SaaS-панели, внутренние системы — всё, где бизнес-домены различимы и проект живёт дольше одного спринта.
📚 Как читать документацию
Заголовок раздела «📚 Как читать документацию»Документация построена от принципов к практике:
- Основные концепции — фрактальность, слои и контракты: фундамент, на котором держится всё остальное.
- Структура проекта — как выглядит дерево каталогов FDA-проекта и куда кладётся новый код.
- Домены и субдомены — как выделять домены и вкладывать субдомены друг в друга.
- Контракты файлов — роль и экспорты каждого файла в домене, с примерами кода.
- Кросс-доменное взаимодействие — родитель и потомок, соседние домены и правила связей между ними.
- FAQ и Checklist — ответы на частые вопросы и чеклист проверки модуля перед мержем.
- Скилл для AI-агентов — как передать все эти правила агенту: Qwen Code, Claude Code и другим.
🧪 Рабочие примеры
Заголовок раздела «🧪 Рабочие примеры»Примеры FDA реализованы на разных фреймворках, чтобы показать переносимость подхода:
| Пример | Фреймворк | Статус | Ссылка |
|---|---|---|---|
example-sveltekit | SvelteKit | ✅ Готов | код |
example-next | Next.js | 🚧 Скоро | код |
example-nuxt | Nuxt | 🚧 Скоро | код |
В примере SvelteKit реализован домен cart — корзина товаров с полным набором слоёв. Его код используется в документации как сквозной пример: вы всегда можете открыть репозиторий и увидеть, как это работает целиком.
🔗 Следующие шаги
Заголовок раздела «🔗 Следующие шаги»→ Основные концепции — фрактальность, слои и контракты подробнее
→ Скилл для AI-агентов — если хотите, чтобы агент собирал домены за вас