Я должен создать протокласс для объекта, который будет иметь около 12 вариантов. Все 12 вариантов имеют четыре одинаковых поля, а затем имеют определенные поля. В большинстве случаев будет гораздо больше неспецифических полей, чем общих полей .
Мне было интересно, какой самый эффективный способ добиться этого.
Первый вариант: определение общих полей в общем протоклассе, а затем объявление поля этого типа во всех конкретных типах:
message CommonFields {
// common_field1
// ... common_fieldN
}
message SpecificType1 {
CommonFields common = 1;
// specific fields...
}
Или было бы лучше определить один прото верхнего уровня, который содержит поля, а затем иметь поле oneof, которое может ссылаться на другой тип, содержащий определенные поля:
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 конкретных.