OxL Справочник OxL
РусскийEnglish

IV.1 Никаких «магических» значений

Таймауты, повторы, размеры, лимиты, TTL и пороги задаются один раз именованной константой или полем конфига и переиспользуются. Литерал в атрибуте допустим только если он встречается в программе один раз и смысл очевиден из контекста (анализатор: magic-literal).

Плохо:

oxl
@timeout(3s) rpc get(id: UserId) -> User
@timeout(3s) rpc list(page: u32) -> List<User>
@timeout(3s) @retry(3) rpc create(…) -> User

Хорошо:

oxl
// src/limits/limits.oxl — единое место для значений по умолчанию
pub const STD_TIMEOUT    = 3s
pub const LONG_TIMEOUT   = 30s
pub const STD_RETRIES    = 3
pub const PAGE_SIZE: u32 = 50

@timeout(STD_TIMEOUT) rpc get(id: UserId) -> User
@timeout(STD_TIMEOUT) rpc list(page: u32) -> List<User>
@timeout(STD_TIMEOUT) @retry(STD_RETRIES) @idempotent rpc create(…) -> User

Ещё лучше — задать общее значение в cluster { defaults { timeout STD_TIMEOUT } } и писать @timeout только там, где значение отличается.

Куда класть значение:

ЗначениеГде
известно при сборке и не зависит от окруженияconst в модуле limits или рядом с использованием
зависит от окружения (адреса, ключи, порты)config (§14.1)
меняется в работе без перезапуска (лимиты, флаги)dynamic (§14.2)
одинаково для всех rpc кластераcluster { defaults { … } }

magic-literal

Исходник: docs/spec/oxl-standard.md