2.4 KiB
2.4 KiB
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).