Files
bible/rules/patterns/no-hardcoded-vendors/contract.md
2026-03-01 22:21:13 +03:00

2.4 KiB
Raw Blame History

Contract: No Hardcoded Vendors or Models

Version: 1.0

Purpose

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


Правило

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


Что запрещено

// Запрещено
if device.Vendor == "Dell" { ... }
if strings.Contains(model, "PowerEdge") { ... }
switch vendor {
case "HP", "HPE", "Hewlett Packard": ...
}
// Запрещено — список вендоров в коде
var knownVendors = []string{"Dell", "HP", "Cisco", "Lenovo"}

Что делать вместо

Логика определяется по полям из данных, не по названию вендора:

// Правильно — смотрим на возможности объекта, не на имя вендора
if device.HasIPMI { ... }
if device.ParserType == "redfish" { ... }

Если нужен маппинг — он живёт в конфиге или справочной таблице БД, не в коде:

# config.yaml
vendor_parsers:
  dell:  redfish
  hp:    ilo
  cisco: ucs
-- справочник в БД
SELECT parser_type FROM vendor_registry WHERE LOWER(vendor) = LOWER(?);

Исключения

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

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

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


Почему

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