- Добавлена документация SLM-архитектуры, базовых правил и прикладных разделов - Добавлены разделы: стили, SVG-спрайты, шаблоны генерации, PostCSS, REST, Realtime - Удалены устаревшие файлы (спрайты, скрипты, стили из app/)
4.4 KiB
4.4 KiB
title, description
| title | description |
|---|---|
| Именование | Как называть переменные, файлы и прочие сущности в коде. |
Именование
Как называть переменные, файлы и прочие сущности в коде.
Базовые правила
| Что | Рекомендуется |
|---|---|
| Папки | kebab-case |
| Файлы | kebab-case |
| Переменные | camelCase |
| Константы | SCREAMING_SNAKE_CASE |
| Классы | PascalCase |
| React-компоненты | PascalCase |
| Хуки | useSomething |
| CSS классы | camelCase |
| Ключи enum | SCREAMING_SNAKE_CASE |
Именование файлов
Суффикс обозначает роль или тип файла. Пишется в единственном числе.
Формат: name.<suffix>.ts.
Хуки
use-name.hook.ts— файл хука, функция именуетсяuseName
Логика
.store.ts— стор.service.ts— сервис
Корневые компоненты слоёв
.screen.tsx— корневой компонент screen-модуля:screens/profile/profile.screen.tsx, компонентProfileScreen.layout.tsx— корневой компонент layout-модуля:layouts/main/main.layout.tsx, компонентMainLayout
Обычные и вложенные модули не получают суффикс слоя: ui/button/button.tsx, screens/profile/parts/activity-feed/activity-feed.tsx.
Типы и контракты
.type.ts— типы и интерфейсы.interface.ts— интерфейсы.enum.ts— enum.dto.ts— внешние DTO.schema.ts— схемы валидации.constant.ts— константы.config.ts— конфигурация
Утилиты
.util.ts— утилиты.helper.ts— вспомогательные функции.lib.ts— библиотечный код
Тесты
.test.ts— тесты.mock.ts— моки
Хорошо
business/
└── auth-by-email/
├── ui/
│ └── login-form.tsx
├── hooks/
│ └── use-auth.hook.ts
├── stores/
│ └── auth.store.ts
├── types/
│ └── auth.type.ts
├── auth-by-email.tsx
└── index.ts
Плохо
business/
└── authByEmail/
├── LoginForm.tsx
├── useAuth.ts
├── authStore.ts
└── index.ts
Булевы значения
- Использовать префиксы
is,has,can,should.
Хорошо
const isReady = true;
const hasAccess = false;
const canSubmit = true;
const shouldRedirect = false;
Плохо
// Плохо: неясное булево значение без префикса.
const ready = true;
const access = false;
const submit = true;
События и обработчики
- Обработчики начинать с
handle. - События и колбэки начинать с
on.
Хорошо
const handleSubmit = () => { ... };
const onSubmit = () => { ... };
Плохо
// Плохо: неочевидное назначение имени.
const submitClick = () => { ... };
Коллекции
- Для массивов использовать имена во множественном числе.
- Для словарей/мап — использовать суффиксы
ById,Map,Dict.
Хорошо
const users = [];
const usersById = {} as Record<string, User>;
const userIds = ['u1', 'u2'];
const ordersMap = new Map<string, Order>();
const featureFlagsDict = { beta: true, legacy: false } as Record<string, boolean>;
Плохо
// Плохо: имя не отражает, что это коллекция.
const user = [];
// Плохо: словарь назван как массив.
const usersMap = [];
// Плохо: по имени непонятно, что это словарь.
const users = {} as Record<string, User>;