Appearance
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
| Сущность | Стиль | Пример |
|---|---|---|
| Переменные | camelCase | userName, isLoading |
| Функции | camelCase | getUser, fetchData |
| Аргументы функций | camelCase | function updateUser(userId) |
| Классы | PascalCase | UserService, HttpClient |
| Интерфейсы / типы | PascalCase | UserDto, ApiResponse |
| Компоненты Vue | PascalCase | UserCard.vue, Dashboard.tsx |
| Константы | UPPER_SNAKE_CASE | DEFAULT_TIMEOUT |
| Enum | PascalCase для имени, UPPER_SNAKE_CASE для значений | enum Role { ADMIN, USER } |
CSS / SCSS
см. ADR-1
Файлы и директории
| Тип | Стиль | Пример |
|---|---|---|
| JS/TS файлы | kebab-case | user-service.ts, fetch-data.ts |
| Компоненты Vue | PascalCase | UserCard.vue, ModalDialog.tsx |
| Конфиги | kebab-case | docker-compose.yml |
База данных (MongoDB)
| Сущность | Стиль | Пример |
|---|---|---|
| Коллекции | snake_case (множественное число) | users, course_enrollments |
| Поля документа | camelCase | createdAt, userId |
| Модели / схемы | PascalCase | User, CourseEnrollment |
| DTO / интерфейсы | PascalCase (имя), camelCase (поля) | UserDto { createdAt: Date } |
Обоснование
camelCase— стандарт для JS/TS, поддерживается линтерами и привычен разработчикам.PascalCaseпомогает отличать классы и компоненты от обычных переменных.UPPER_SNAKE_CASEдля констант исторически принят и читается лучше.snake_caseв коллекциях Mongo удобно для CLI и скриптов, а поля вcamelCaseорганично работают в JS.- BEM и
kebab-caseв CSS повышают читаемость и предсказуемость стилей.
Последствия
✅ Единообразный код, проще ревью и сопровождение.
✅ Упрощён онбординг новых разработчиков.
⚠️ Требуется привести старый код к новым правилам и настроить линтеры.