#protocol-buffers
Вопрос:
Код
Рассмотрим следующее объявление сообщения protobuf:
syntax = "proto3"; enum Airport { TLV = 0; JFK = 1; ... } message Flight { ... Airport origin_airport = 11; ... }
Проблема
Из-за некоторых бизнес-требований мы должны установить Airport
, чтобы это была свободная строка, а не выбор из закрытого перечисляемого списка. Я знаю, что могу добавлять и удалять поля по желанию, если я не использую одно и то же число повторно. Однако я не уверен, что могу использовать то же имя, а-ля:
message Flight { ... reserved 11; // The old enum field number string origin_airport = 18; // Unused so far ... }
Мой Вопрос
При обновлении типа поля protobuf3 можно ли сохранить имя поля, если его номер изменится?
Ответ №1:
Если вы не используете вариант JSON, то имена вообще не используются в полезной нагрузке, так что технически повторное использование имен совершенно законно; однако: это может привести к ненужным проблемам с существующим кодом — в зависимости от существующего кода и правил, специфичных для языка / фреймворка, и может привести к путанице. Поскольку этого можно избежать, я бы рекомендовал использовать такое имя origin_airport_code
или подобное.
(Точка я делаю здесь: любой код, который использовал старое поле, наверное, нуждается во внимании, я могу видеть некоторые сценарии, в которых существующий код может компилироваться после смены, но имею в виду что-то другое, и, следовательно, приводит к ошибке, что было бы избежать, если бы вы поменяли название и заставили каждого использования, чтобы посетить)
Комментарии:
1. Хорошие моменты! Я начинаю думать, что собираюсь использовать венгерскую нотацию, чтобы избежать этого 🙂