EN Прислать проект
Все статьи

Структура проекта: как разложить файлы, чтобы не путаться

Структура проекта простыми словами: папки по фичам или по слоям, где держать конфиг, интерфейс, логику и доступ к данным, чтобы ни ты, ни ИИ не терялись.

· 4 минКодОсновы

Структура проекта — это то, как файлы и папки разложены в репозитории: где интерфейс, где логика, где работа с базой и настройки. Хорошая структура отвечает на вопрос «где это лежит?» раньше, чем ты успел его задать.

В вайбкод-проектах структура обычно складывается сама: ИИ создаёт файл там, где ему удобно в данный момент, и через пару месяцев в папке components лежат и кнопки, и запросы к базе, и расчёт цены. Работает — до первой правки, которая требует найти все места, где считается цена.

Почему это важно, когда код пишет ИИ

ИИ-ассистент не помнит твой проект между сессиями. Каждый раз он заново смотрит на дерево папок и угадывает, куда что положить и где что искать. Если структура предсказуемая, он угадывает правильно. Если нет — создаёт четвёртую копию функции, потому что три предыдущие не нашёл.

То же самое с людьми. Новый разработчик по структуре понимает, как устроен проект, ещё до того, как открыл первый файл. Или не понимает.

Папки по слоям или по фичам

Есть два основных подхода.

По слоям — всё одного типа вместе: components/, hooks/, services/, api/, types/. Так устроены многие шаблоны и учебники. Удобно в маленьком проекте, но с ростом каждая фича размазывается по пяти папкам, и чтобы поменять оплату, ты открываешь файлы из всех пяти.

По фичам — всё про одну часть продукта вместе: billing/, profile/, projects/. Внутри фичи уже можно разделять на интерфейс, логику и данные. Поменять оплату — значит работать в одной папке.

Для продуктов больше пары экранов мы советуем фичи сверху, слои внутри. Примерно так:

src/
  features/
    billing/
      ui/          компоненты и страницы
      logic.ts     правила: что можно, сколько стоит
      data.ts      запросы к базе и API
    projects/
      ...
  shared/
    ui/            кнопки, поля, модалки
    lib/           общие утилиты
  config/          чтение переменных окружения
  db/              схема и миграции

Точные названия не важны. Важно, чтобы правило было одно и соблюдалось везде.

Где что живёт

Конфигурация. Переменные окружения читаются в одном месте, проверяются при старте и дальше передаются как обычные значения. Если process.env встречается в двадцати файлах, никто не знает, какие переменные проекту на самом деле нужны.

Интерфейс. Компоненты показывают данные и сообщают о действиях пользователя. Они не ходят в базу напрямую и не решают, сколько стоит подписка. Общие элементы — кнопки, поля, модальные окна — лежат отдельно от фичей, потому что ими пользуются все.

Логика. Правила продукта: кто что может, как считается цена, когда истекает доступ. Это самая ценная часть кода, и её проще всего проверить тестами, если она не перемешана с интерфейсом и запросами.

Доступ к данным. Запросы к базе и внешним API — в отдельных модулях с понятными функциями вроде getProjectsForUser(userId). Тогда проверка прав живёт в одном месте, а не повторяется в каждом компоненте с переменным успехом.

Серверное и клиентское. Код, который работает с секретами и базой, должен лежать там, где он гарантированно не попадёт в браузер. Во многих фреймворках это отдельная папка или пометка в файле — узнай, как это устроено у тебя, и соблюдай.

Как переехать, не останавливая работу

Переделывать всё за выходные не надо. Договорись о целевой структуре, запиши её в README и в инструкции для ИИ-ассистента (CLAUDE.md, .cursorrules или аналог). Дальше переноси по одной фиче — обычно начиная с той, которую трогаешь чаще всего. Один перенос — один коммит, без попутных правок логики: так легко проверить, что ничего не сломалось.

Новый код сразу кладётся по новым правилам. Через месяц старой структуры останется немного, и её можно будет добить.

Признаки, что структура проекта не работает

  • Ты ищешь файл поиском, а не по дереву папок.
  • В проекте есть utils.ts на тысячу строк.
  • Одна и та же логика находится в двух-трёх местах с небольшими отличиями.
  • Чтобы поменять одну фичу, приходится трогать больше пяти папок.
  • ИИ регулярно создаёт файлы не там, где ты ожидал.

Коротко

  • Структура проекта — это ответ на вопрос «где это лежит», понятный и тебе, и ИИ.
  • Для продуктов больше пары экранов лучше работают фичи сверху и слои внутри.
  • Конфиг читается в одном месте, интерфейс не ходит в базу, логика отделена от запросов.
  • Целевую структуру запиши в README и в инструкции для ИИ-ассистента.
  • Переезжай по одной фиче за коммит, а новый код сразу клади по новым правилам.

SUBXCAT помогает разложить разросшийся проект по полочкам, не останавливая работу над продуктом.

Хочешь, сделаем это за тебя?

Расскажи о проекте ассистенту — через пять минут будет примерная смета, через 48 часов разбор.

Созвон с командой 20 минут: инженер, дизайнер и маркетолог посмотрят на проект вместе с тобой.
Записаться на звонок