Skip to content

ADR-5: Конвенция именования сущностей в проекте

Статус

На согласовании (06.10.2025)

Цель

Установить единый и понятный стиль именования переменных, функций, классов, файлов и коллекций в проекте.

Проблемы, которые решаем:

  • разнородные стили затрудняют чтение и ревью кода;
  • сложно быстро ориентироваться в проекте при онбординге новых разработчиков;

Решение

Общая идея

  • Следуем привычным для JS/TS соглашениям: camelCase для переменных и свойств, PascalCase для классов, компонентов и типов.
  • Для постоянных значений и глобальных констант используем UPPER_SNAKE_CASE.
  • В базе данных (MongoDB) — имена коллекций в snake_case, поля документов в camelCase.
  • В CSS/SCSS — kebab-case и методология BEM.
  • Файлы и директории — kebab-case для обычных файлов, PascalCase для компонентов.

Правила

JavaScript / TypeScript

СущностьСтильПример
ПеременныеcamelCaseuserName, isLoading
ФункцииcamelCasegetUser, fetchData
Аргументы функцийcamelCasefunction updateUser(userId)
КлассыPascalCaseUserService, HttpClient
Интерфейсы / типыPascalCaseUserDto, ApiResponse
Компоненты VuePascalCaseUserCard.vue, Dashboard.tsx
КонстантыUPPER_SNAKE_CASEDEFAULT_TIMEOUT
EnumPascalCase для имени, UPPER_SNAKE_CASE для значенийenum Role { ADMIN, USER }

CSS / SCSS

см. ADR-1

Файлы и директории

ТипСтильПример
JS/TS файлыkebab-caseuser-service.ts, fetch-data.ts
Компоненты VuePascalCaseUserCard.vue, ModalDialog.tsx
Конфигиkebab-casedocker-compose.yml

База данных (MongoDB)

СущностьСтильПример
Коллекцииsnake_case (множественное число)users, course_enrollments
Поля документаcamelCasecreatedAt, userId
Модели / схемыPascalCaseUser, CourseEnrollment
DTO / интерфейсыPascalCase (имя), camelCase (поля)UserDto { createdAt: Date }

Обоснование

  • camelCase — стандарт для JS/TS, поддерживается линтерами и привычен разработчикам.
  • PascalCase помогает отличать классы и компоненты от обычных переменных.
  • UPPER_SNAKE_CASE для констант исторически принят и читается лучше.
  • snake_case в коллекциях Mongo удобно для CLI и скриптов, а поля в camelCase органично работают в JS.
  • BEM и kebab-case в CSS повышают читаемость и предсказуемость стилей.

Последствия

✅ Единообразный код, проще ревью и сопровождение.
✅ Упрощён онбординг новых разработчиков.
⚠️ Требуется привести старый код к новым правилам и настроить линтеры.