Files
bible/rules/patterns/no-hardcoded-vendors/contract.md
Michael Chus a44133aff2 Move inline code examples out of normative contracts
identifier-normalization, no-hardcoded-vendors,
vendor-installer-verification, and build-version-display follow the
go-database split: rules in contract.md, snippets in README.md. Routed
contract reads get cheaper; examples stay available on demand. Lint now
also rejects stale kit/patterns references.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 10:00:02 +03:00

1.9 KiB
Raw Blame History

Contract: No Hardcoded Vendors or Models

Version: 1.1

Purpose

Запрет на хардкод названий вендоров, моделей и партномеров в коде.

See README.md for code examples.

Правило

Названия вендоров, моделей, серий оборудования и партномеров не появляются в коде. Они приходят из данных: БД, конфига, входного документа, справочника.

  • Запрещены сравнения и switch по имени вендора (if device.Vendor == "Dell") и списки вендоров в коде (var knownVendors = []string{...}).
  • Логика определяется по полям из данных (device.HasIPMI, device.ParserType), не по названию вендора.
  • Если нужен маппинг вендор → поведение, он живёт в конфиге или справочной таблице БД.

Исключения

Допускается упоминание вендора только в:

  • Названиях пакетов/директорий парсеров: internal/parser/vendors/dell/
  • Комментариях и документации
  • Тестовых фикстурах (XML/JSON с реальными данными оборудования)

В этих местах название вендора — идентификатор модуля, не условие в логике.

Почему

Хардкод вендора делает код хрупким: новый вендор требует правок в коде, а не в данных. Опечатка в строке ("HPE" vs "HP") создаёт незаметный баг. Регистр не контролируется (см. identifier-normalization contract).