Использовать ENUM для InstrumentType
Вместо строк "share", "bond" и т.д.
Будет неудобно. На стороне клиента можно самим сделать enum-оболочку. Текстовое представление не имеет большого размера и удобнее читать логи, что происходит и с чем имеем дело.
@MasterDimmy как вы определяете, когда пользоваться протобафным enum, а когда забивать на него? :)
enum подразумевает целочисленное представление, если речь идет о порядковом номере - то нужен enum. Если же, как в примере выше, удобнее строчное представление - то достаточно массива строковых констант, о чем и сказано. Так и определяем. Как бы, YAGNI ;)
enum подразумевает целочисленное представление, если речь идет о порядковом номере - то нужен enum.
Крайне сомнительное утверждение, есть ли какие-то официальные источники? Не затруднит ли вас привести примеры хороших и плохих enum в контексте Protobuf?
Если же, как в примере выше, удобнее строчное представление
Удобно в чём конкретно? Я собственно завёл это issue после того, как не понял из сгенерированного кода, какие значения могут быть в этом поле и пришлось грепать по документации. Тип инструмента – это не динамическая строка, а элемент конкретного множества.
Вот примеры перечислений из оф. документации:
enum Corpus {
UNIVERSAL = 0;
WEB = 1;
IMAGES = 2;
LOCAL = 3;
NEWS = 4;
PRODUCTS = 5;
VIDEO = 6;
}
enum EnumAllowingAlias {
option allow_alias = true;
UNKNOWN = 0;
STARTED = 1;
RUNNING = 1;
}
Почему-то гугл не предлагает делать "web", "images", "local" и т.д.
И ни о каком порядковом номере речи не идёт.
Плюхи:
- Мы из коробки имеем constraint на уровне типа (с некоторыми допущениями).
- Мы знаем, какие значения может принимать поле на уровне описания контракта и полученного кода.
- Никто не мешает получать строковое представление по числовому стандартными способами.
- Никто не мешает преобразовывать полученную "транспортную" чиселку в свой доменный тип.
Крайне сомнительное утверждение, есть ли какие-то официальные источники?
Можете сомневаться. Делайте как хотите.
Плюхи
Все тоже самое применимо и к строкам. Но и вспомним:
http.StatusOK = "OK" http.StatusCreated = "Created" http.StatusAccepted = "Accepted"
Большинство типов в апи описаны через enum. Поэтому поддержу @Antonboom, для InstrumentType также напрашивается enum.
Текстовое представление не имеет большого размера и удобнее читать логи, что происходит и с чем имеем дело.
Кажется, что при разработке API стоит руководствоваться удобством для потребителя API, а не удобством для логирования на бэке.
Если представление протобуфного енама не настраивается в логах, то можно сделать value.ToString или что-то типа того :)