Найти в Дзене
Vibecode Wiki

Как заставить ИИ писать чистый, масштабируемый код: 7 правил рефакторинга

В 2026 году ИИ (Claude 4, Cursor, Windsurf, Grok) может написать тебе Telegram-бота, Next.js-приложение или автономного агента за 10–15 минут. Проблема одна: 90 % кода, который он выдаёт с первого раза — это классическое спагетти. Всё в одном файле, переменные data1, result2, дублирование кода, нет ошибок, нет типов, нет структуры. Через неделю такой проект невозможно поддерживать, а при росте пользователей он просто падает. Я сам прошёл этот путь, теперь у меня есть чёткая система из 7 правил рефакторинга, которую я использую в каждом проекте. Статья большая и максимально практическая. Копируй промпты прямо в Claude/Cursor — они уже протестированы на реальных проектах. Обычный промпт: «Напиши Telegram-бота на Node.js, который отвечает на сообщения с помощью Claude». Результат: 400 строк в одном index.js, всё в bot.on('message'), никаких модулей. Правильный подход: Проблема: один обработчик делает и парсинг сообщения, и запрос к БД, и отправку уведомлений, и логирование. Как просить ИИ
Оглавление

В 2026 году ИИ (Claude 4, Cursor, Windsurf, Grok) может написать тебе Telegram-бота, Next.js-приложение или автономного агента за 10–15 минут. Проблема одна: 90 % кода, который он выдаёт с первого раза — это классическое спагетти. Всё в одном файле, переменные data1, result2, дублирование кода, нет ошибок, нет типов, нет структуры. Через неделю такой проект невозможно поддерживать, а при росте пользователей он просто падает.

Я сам прошёл этот путь, теперь у меня есть чёткая система из 7 правил рефакторинга, которую я использую в каждом проекте.

Статья большая и максимально практическая. Копируй промпты прямо в Claude/Cursor — они уже протестированы на реальных проектах.

Почему обычные промпты дают спагетти и как это исправить

Обычный промпт: «Напиши Telegram-бота на Node.js, который отвечает на сообщения с помощью Claude».

Результат: 400 строк в одном index.js, всё в bot.on('message'), никаких модулей.

Правильный подход:

  1. Сначала просишь архитектуру.
  2. Потом заставляешь ИИ сам рефакторить по 7 правилам.
  3. Используешь специальные рефакторинг-промпты (ниже).

7 правил рефакторинга для ИИ (с промптами-шаблонами)

Правило 1. Принцип единственной ответственности (Single Responsibility Principle)

Проблема: один обработчик делает и парсинг сообщения, и запрос к БД, и отправку уведомлений, и логирование.

Как просить ИИ:

Перепиши следующий код строго по принципу SRP (Single Responsibility Principle).

Каждый класс/функция должна решать ТОЛЬКО одну задачу.

Раздели код на:

- handlers/ (обработчики событий)

- services/ (бизнес-логика)

- repositories/ (работа с БД)

- utils/ (вспомогательные функции)

Сохрани всю функциональность. Используй TypeScript. Добавь JSDoc.

Результат: вместо одного файла — чистая структура папок, которую легко масштабировать.

Правило 2. Осмысленные имена + доменный язык

Плохо: const x = await db.query(...) Хорошо: const userSubscription = await subscriptionRepository.findActiveByTelegramId(telegramId)

Промпт-шаблон:

Перепиши весь код, используя доменный язык проекта.

Все переменные, функции и классы должны читать как предложение на русском/английском (как будто код — это документация).

Правила именования:

- camelCase для функций и переменных

- PascalCase для классов

- существительные для сущностей (UserSubscription)

- глаголы для действий (validateAndActivateSubscription)

Запрещено: data, result, temp, obj, arr, x, y, i

Правило 3. DRY + KISS + YAGNI (не пиши код «на будущее»)

Промпт:

Применяй принципы DRY, KISS и YAGNI максимально строго.

1. Выноси любой дублирующийся код в отдельные функции/утилиты.

2. Делай самый простой работающий вариант (KISS).

3. Не добавляй ничего «на будущее» (YAGNI).

Перепиши код и покажи список всех мест, где ты применил эти принципы.

Правило 4. Надёжная обработка ошибок и логирование

ИИ почти никогда не делает это сам. Проси отдельно.

Добавь полноценную обработку ошибок и структурированное логирование.

Требования:

- Используй try/catch везде, где есть async/await

- Создай централизованный errorHandler

- Все ошибки логируй через winston/pino (или console с понятным форматом)

- Добавь retry-логику для внешних API (Claude, OpenAI, Supabase)

- Возвращай пользователю дружелюбное сообщение, а не сырой error

Структура:

- lib/errors/CustomError.ts

- lib/logger.ts

- middleware/errorHandler.ts

Правило 5. Модульность и чистая архитектура (слои)

Для любого проекта > 200 строк:

Перестрой весь проект по чистой архитектуре (Clean Architecture):

Слои (от внешнего к внутреннему):

1. Presentation (Telegram handlers / API routes)

2. Application (use-cases / services)

3. Domain (entities, value objects, domain services)

4. Infrastructure (repositories, external services, DB)

Используй dependency injection (tsyringe или просто передача через конструктор).

Не допускай импортов из внешних слоёв во внутренние.

Правило 6. Типизация + документация (TypeScript / Pydantic / Zod)

Добавь строгую типизацию и автодокументацию.

- TypeScript: interface + type для всего

- Zod для валидации входящих данных

- JSDoc/TSDoc для всех публичных функций и классов

- Добавь README.md с описанием архитектуры проекта

Правило 7. Готовность к масштабированию с первого дня

Сделай код готовым к росту до 10 000+ пользователей:

Требования:

- Все внешние вызовы (Claude, DB, API) — асинхронные и с таймаутами

- Добавь rate limiting

- Используй connection pool для Supabase/Postgres

- Добавь кэширование (Redis или in-memory для простых случаев)

- Код должен легко запускаться в Docker + Railway/Fly.io

- Добавь health-check endpoint

Универсальный мета-промпт «Сделай это как профи» (копируй и используй)

Самый мощный промпт, которым я пользуюсь каждый день:

Ты — Principal Engineer в компании, которая делает 50+ ИИ-продуктов в месяц.

Твоя задача: взять любой код и превратить его в эталон чистоты и масштабируемости 2026 года.

Правила, которые ты обязан применить (по порядку):

1. SRP

2. Осмысленные имена + доменный язык

3. DRY + KISS + YAGNI

4. Полная обработка ошибок + логирование

5. Чистая архитектура (слои)

6. Строгая типизация + Zod

7. Готовность к продакшену (асинхронность, rate limit, Docker-ready)

После рефакторинга:

- Покажи структуру папок

- Дай список всех изменений

- Добавь комментарии // TODO: для мест, где можно улучшить дальше

- Напиши команду для запуска тестов (даже если тестов пока нет)

Код для рефакторинга:

[paste сюда]

Реальный пример: от спагетти к чистому коду за 3 итерации

Возьмём типичный спагетти, который выдаёт Claude с первого раза:

// index.js — 380 строк

bot.on('message', async (msg) => {

const text = msg.text;

if(text.startsWith('/start')) {

// 150 строк логики регистрации + подписки + отправки сообщений

}

// ... ещё 200 строк

});

Итерация 1 — применяем мета-промпт выше → получаем структуру папок + разделение на слои.

Итерация 2 — просим отдельно обработку ошибок и логирование.

Итерация 3 — просим добавить тесты (да, ИИ умеет писать тесты!).

Результат: проект из одного файла превращается в 12 файлов + тесты, и его можно поддерживать годами.

Чек-лист перед деплоем

  • Применены все 7 правил
  • Структура папок чистая
  • Нет дублирования кода
  • Есть обработка ошибок везде
  • Типизация 100%
  • Логирование структурированное
  • Docker + .env.example
  • Health-check endpoint
  • README с запуском