Корпоративный стандарт код-стайла и инженерных соглашений¶
Цель документа¶
Этот стандарт фиксирует обязательные требования к коду и инженерному процессу проекта Konstructorium.
Документ формализует практики, которые уменьшают дефектность, сокращают стоимость сопровождения и делают ревью предсказуемым.
Каждое правило описывается в формате: - Требование - Причина - Как проверить - Корректно / некорректно
Нормативная и доказательная база¶
Основные внешние ориентиры: - PEP 8 — читаемость и единообразие Python-кода. - PEP 257 — договоренности по docstring. - The Twelve-Factor App — операционная зрелость сервисов. - Semantic Versioning — предсказуемость изменений контрактов. - Keep a Changelog — прозрачность изменений.
Внутренняя база проекта: - Стандарты документации - QA стратегия - Управление изменениями
1. Принципы обязательности¶
1.1 Единое применение¶
- Требование: стандарт обязателен для всех сервисов,
frontend,tests,scripts. - Причина: разные локальные стили повышают когнитивную нагрузку и увеличивают время ревью.
- Как проверить: в PR нет аргументации «мы в этом сервисе делаем иначе» без утвержденного исключения.
- Корректно: единые паттерны именования и docstring во всех сервисах.
- Некорректно: один сервис использует произвольный стиль «по привычке команды».
1.2 Контролируемые исключения¶
- Требование: любое исключение из правил документируется в PR и связано с техническим ограничением.
- Причина: без формализации исключения быстро становятся новым хаотичным стандартом.
- Как проверить: для каждого исключения есть описание риска, срока и условий пересмотра.
- Корректно: «временное исключение до миграции X, срок Y, ответственный Z».
- Некорректно: «сделал так быстрее, потом поправим».
2. Именование¶
2.1 Общие требования¶
- Требование: имена отражают бизнес-смысл, а не техническую случайность.
- Причина: семантические имена снижают вероятность ошибок интеграции и неправильного использования API.
- Как проверить: по названию символа понятна доменная роль без чтения тела функции.
- Корректно:
calculate_order_total,is_seller_approved. - Некорректно:
do_work,tmp_data,calc.
2.2 Python¶
- Требование:
snake_caseдля функций/переменных,PascalCaseдля классов,UPPER_SNAKE_CASEдля констант. - Причина: соответствие отраслевым соглашениям и снижение порога входа для новых разработчиков.
- Как проверить: регулярная проверка имен и code review.
- Корректно:
order_status,OrderSerializer,MAX_RETRY_COUNT. - Некорректно:
Order_status,orderSerializer,maxRetryCount.
2.3 JavaScript и React¶
- Требование:
camelCaseдля функций и переменных,PascalCaseдля компонентов,UPPER_SNAKE_CASEдля констант. - Причина: единый стиль ускоряет чтение frontend-кода и уменьшает дефекты переиспользования.
- Как проверить: проверка экспортируемых сущностей и имен компонентов.
- Корректно:
loadUserProfile,ProductCard,DEFAULT_PAGE_SIZE. - Некорректно:
load_user_profile,product_card.
3. Структура модулей и функций¶
3.1 Единственная ответственность¶
- Требование: модуль и функция должны иметь одну главную ответственность.
- Причина: монолитные функции сложнее тестировать, отлаживать и безопасно менять.
- Как проверить: функция не смешивает инфраструктурную, бизнес- и форматирующую логику без необходимости.
- Корректно: отдельные функции для валидации, преобразования и сохранения.
- Некорректно: одна функция делает запрос, бизнес-решение, логирование, формат API-ответа.
3.2 Ограничение сложности¶
- Требование: избегать глубоких вложенностей и длинных блоков условной логики.
- Причина: высокая цикломатическая сложность повышает риск регрессий.
- Как проверить: сложные ветвления декомпозированы в именованные шаги.
- Корректно: guard clauses + небольшие подфункции.
- Некорректно: вложенные
if/elseна 4-5 уровней.
4. Docstring и комментарии (максимальный режим)¶
4.1 Python docstring¶
- Требование: docstring обязателен для каждого модуля, класса, функции и метода.
- Причина: явные контракты делают поведение кода проверяемым и воспроизводимым.
- Как проверить: отсутствие сущностей без docstring в исходниках.
- Корректно: docstring содержит
Args,Returns,Raises, побочные эффекты. - Некорректно: пустой или формальный docstring вида «Do something».
4.2 JavaScript JSDoc¶
- Требование: JSDoc обязателен для экспортируемых функций, React-компонентов и сложных внутренних функций.
- Причина: типовые ошибки интеграции часто вызваны неявными ожиданиями параметров.
- Как проверить: экспортируемая сущность имеет JSDoc с параметрами и результатом.
- Корректно:
@param,@returns, описание ограничений. - Некорректно: экспорт без описания контракта.
4.3 Комментарии¶
- Требование: комментарии объясняют «почему», инварианты, компромиссы и риски.
- Причина: комментарии «что делает код» устаревают и не дают инженерной ценности.
- Как проверить: перед нетривиальными участками есть контекст решения.
- Корректно: пояснение бизнес-правила или технического ограничения.
- Некорректно: «увеличиваем i на 1».
5. Обработка ошибок и контракты¶
5.1 Явная обработка ошибок¶
- Требование: запрещено подавлять исключения без логирования и объяснения.
- Причина: «тихие» ошибки маскируют дефекты и усложняют инцидент-менеджмент.
- Как проверить: нет
except Exception: passи аналогов. - Корректно: логирование, контекст, повторный выброс или безопасный fallback.
- Некорректно: игнорирование исключения без следа.
5.2 Стабильность публичных контрактов¶
- Требование: изменение API/контрактов сопровождается обновлением документации и тестов.
- Причина: несинхронные изменения ломают потребителей сервисов.
- Как проверить: PR содержит код + docs + тестовую корректировку при изменении контракта.
- Корректно: endpoint обновлен и отражен в сервисной документации.
- Некорректно: код изменен, docs остались в старом состоянии.
6. Импорты, зависимости, мертвый код¶
6.1 Чистота импортов¶
- Требование: неиспользуемые импорты запрещены; порядок импортов единообразный.
- Причина: лишние зависимости усложняют сопровождение и скрывают реальную связанность.
- Как проверить: линтер или ревью не выявляет неиспользуемых импортов.
- Корректно: только используемые импорты, логичный порядок групп.
- Некорректно: «про запас» импортированные модули.
6.2 Запрет мертвого кода¶
- Требование: удалять закомментированные фрагменты и недостижимые ветки.
- Причина: мертвый код создает ложные сигналы и мешает анализу.
- Как проверить: в измененных файлах нет старых закомментированных реализаций.
- Корректно: история изменений в Git, а не в комментариях.
- Некорректно: «старый код на всякий случай» в файле.
7. Требования к ревью и готовности PR¶
- Код следует стандарту именования и структуры.
- Докстринги/JSDoc покрывают все затронутые сущности в максимальном режиме.
- Для нетривиальной логики добавлены поясняющие комментарии с причинно-следственной связью.
- Изменения в контрактах синхронизированы с документацией и тестами.
- Локальная проверка (линтер/тесты) выполнена или ограничение задокументировано.
8. Чек-лист самоаудита разработчика¶
Перед передачей на ревью разработчик обязан подтвердить: 1. Явные и семантические имена в измененных файлах. 2. Наличие docstring/JSDoc для всех затронутых сущностей. 3. Комментарии объясняют мотивы и ограничения, а не очевидные действия. 4. Ошибки не подавляются молча, присутствует диагностический контекст. 5. Документация и код согласованы по API и поведению.