Код-стайл: корпоративные дополнения
Рекомендация
v8std#std550диагностикаNestedStatementsдиагностикаLineLengthдиагностикаCommentedCodeдиагностикаMethodSize
Рекомендация
Заголовок раздела «Рекомендация»Практичные правила из публичных стайл-гайдов, дополняющие v8std. Большинство автоматизируется диагностиками BSL LS.
Именование и префиксы объектов
Заголовок раздела «Именование и префиксы объектов»Собственные объекты в типовых конфигурациях создаются под префиксом: КИ_ и
ДД_ (по конфигурации). Префикс отличает наши объекты от типовых и снижает
конфликты при обновлении и merge — это обязательное соглашение для командной
разработки и аутсорса.
Именование в коде:
- Булевы — по истинному состоянию (
ЕстьОшибки,ЭтоТоварТара), без отрицаний в названии флага. - Процедуры — глагол по действию:
СформироватьПроводки,ОбновитьКэш. Функции — сущность/результат:НомерДокумента(),ПараметрыПодключения(). - «Магические» сокращения без словаря команды запрещены — аутсорс уносит контекст из проекта вместе с собой.
- Длина строки — до ~120 символов (удобно для ревью и диффов).
Структура кода и читаемость
Заголовок раздела «Структура кода и читаемость»- Guard-оператор вместо вложенных условий: ранний
Возврат/Продолжить. - Ограничивать уровень вложенности конструкций.
- Сложные условия выносить в переменные/функции с говорящими именами.
- Длинные сигнатуры (много параметров) → передавать структуру.
- Экспортные процедуры/функции — с описанием; скопированный из интернета код — с пометкой-источником.
Запросы
Заголовок раздела «Запросы»- Не разбивать текст запроса построчной конкатенацией — это ломает конструктор
запросов. Динамику собирать блоками, не ломающими конструктор (например, заменой
(1 = 1)на условие). - Не смешивать контексты: условия отбора — в
ГДЕ, условия связи — вПО. - Проверка пустого результата — через
Запрос.Выполнить().Пустой(), а не выборку.
Исключения и логирование
Заголовок раздела «Исключения и логирование»ВызватьИсключение;в блокеИсключение— без параметра (сохраняет стек).- Не передавать текст ошибки строкой вместо записи в ЖР.
- Использовать
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), а неОписаниеОшибки().
Транзакции и блокировки
Заголовок раздела «Транзакции и блокировки»- Каноничный блок:
НачатьТранзакцию/Попытка/ЗафиксироватьТранзакцию/Исключение/ОтменитьТранзакцию/ВызватьИсключение. - Управляемые блокировки при многопоточной загрузке — обязательны против дублей и гонок.
Эти правила v8std формулирует обобщённо или не покрывает вовсе, а в ревью они всплывают чаще всего. Собранные в одном месте, они дают единый ориентир и подключаются к профилю диагностик.
Когда не применять
Заголовок раздела «Когда не применять»- Префиксы не нужны в самописных конфигурациях с нуля (там нет типовых объектов, от которых надо отличаться) — но нужны всегда в доработках типовых.
- Guard-операторы не самоцель: если условие одно и блок короткий, обычный
Есличитается не хуже. - В код типовой конфигурации, который правится точечно (без рефакторинга), стиль окружающего кода важнее наших правил — не переформатируйте чужие модули «заодно».
См. также
Заголовок раздела «См. также»- Структура модуля и областей
- Обработка ошибок и логирование
- Идемпотентность обработчиков обмена — управляемые блокировки против дублей.