Лучшая практика встраивания сообщений в protobuf - PullRequest
1 голос
/ 18 февраля 2020

У меня есть сообщение protobuf, которое содержит другое повторяющееся сообщение. Это выглядит так:

message AddGroupsRequest
{
    message GroupProperties
    {
        string name = 1;
        int32 some_property_1 = 2;
        int32 some_property_2 = 3;
    }

    repeated GroupProperties group_properties = 1;
}

Мой вопрос заключается в том, является ли это наилучшим способом кодирования сообщений, или они должны быть разделены следующим образом:

message GroupProperties
{
    string name = 1;
    int32 some_property_1 = 2;
    int32 some_property_2 = 3;
}

message AddGroupsRequest
{
    repeated GroupProperties group_properties = 1;
}

Существуют ли последствия для определения сообщение так или иначе?

Спасибо

1 Ответ

3 голосов
/ 18 февраля 2020

Базовая кодировка двух спецификаций будет идентична при использовании двоичного вывода.

$> echo 'group_properties { name: "Bob", some_property_1: 6 }' \
      | protoc nested.proto --encode='AddGroupsRequest'        \
      | xxd

00000000: 0a07 0a03 426f 6210 06                   ....Bob..
$> echo 'group_properties { name: "Bob", some_property_1: 6 }' \
      | protoc sibling.proto --encode='AddGroupsRequest'       \
      | xxd

00000000: 0a07 0a03 426f 6210 06                   ....Bob..

Единственное решение - если вы хотите, чтобы сгенерированное имя класса C ++ было AddGroupsRequest_GroupProperties ( во вложенной форме) или если вам нужен независимый тип GroupProperties, что в значительной степени является предпочтением. Обратите внимание, что вы можете изменить это позже, не нарушая уже закодированные сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...