我必须为一个对象生成一个proto类,它将有大约12个变体。所有12个变体共有四个相同的字段,然后有特定的字段。在大多数情况下,将有更多的非特定字段,而不是公共字段。
我想知道什么是实现这一目标的最有效的方式。
第一个选项:在公共proto类中定义公共字段,然后在所有特定类型中声明此类型的字段:
message CommonFields {
// common_field1
// ... common_fieldN
}
message SpecificType1 {
CommonFields common = 1;
// specific fields...
}还是最好先定义一个包含字段的顶级proto,然后再定义一个字段,该字段可以引用包含特定字段的另一个类型:
message BaseType {
// common_field_1
// ... common_field_N
oneof specific_fields {
SpecificTypeFields1 type1_fields = N;
SpecificTypeFields2 type1_fields = N+1;
}
}
message SpecificTypeFields1 {
// specific fields...
}
message SpecificTypeFields2 {
// specific fields...
}我对表演和惯例特别感兴趣。或者,如果有更典型的方法,例如只重复公共字段。请记住,虽然我的原型将只有4个公共字段,而且通常是3-8个特定字段。
发布于 2019-03-16 18:40:51
根据protobuf库的不同,对子消息的编码通常会有一些性能损失。对于大多数图书馆来说,比如Google自己的protobuf库,差别很小。使用任何一个选项,您最终会对每个消息编码一个子消息,从而进一步减少影响。
我见过两种常用的格式。如果解码器端已经知道消息类型(例如rpc方法名),聚合通常更容易实现,因为它不需要单独检查类型之一。
但是,如果不知道消息类型,那么其中一个方法更好,因为它允许很容易地检测该类型。
https://stackoverflow.com/questions/55186466
复制相似问题