protobuf 嵌入式消息最佳实践
protobuf embedded message best practice
我有一条包含另一条重复消息的 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;
}
以这种或另一种方式定义消息是否有影响?
谢谢
使用二进制输出时,两种规范的底层编码将相同。
$> 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++ class 名称为 AddGroupsRequest_GroupProperties
(以嵌套形式),或者您是否想要一个独立的 GroupProperties
类型,这主要是偏好的东西。请注意,您可以稍后更改此设置而不会破坏已编码的消息。
我有一条包含另一条重复消息的 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;
}
以这种或另一种方式定义消息是否有影响?
谢谢
使用二进制输出时,两种规范的底层编码将相同。
$> 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++ class 名称为 AddGroupsRequest_GroupProperties
(以嵌套形式),或者您是否想要一个独立的 GroupProperties
类型,这主要是偏好的东西。请注意,您可以稍后更改此设置而不会破坏已编码的消息。