问题描述
我的应用程序具有各种客户端(例如,Client1,Client 2,Client3 ...等)。客户共享一些通用属性并拥有一些唯一数据。
在我的.proto文件中,我想对这种行为进行建模。我想出了:
message MyClientsData {
BaseClientData baseData;
Client1SpecificData client1;
Client2SpecificData client2;
... and so forth...
}
BaseClientData
是所有客户端之间的通用数据。
这在客户端数量非常有限的情况下适用于简单的用例,但是如果数量增加,将变得难以阅读。 当在不同的反序列化请求中有唯一的数据时,是否有一些好的做法来处理这种情况?
解决方法
使用google.protobuf.Any
import "google/protobuf/any.proto"
message Client1SpecificData {
}
message Client2SpecificData {
}
message MyClientsData {
BaseClientData baseData = 1;
google.protobuf.Any specificData = 2;
}
使用其中一个
message MyClientData {
BaseClientData baseData = 1;
oneof specificData {
Client1SpecificData = 2;
Client2SpecificData = 3;
}
}
拆分为不同的消息
message Client1SpecificData {
BaseClientData baseData = 1;
// other data specific to client1
}
message Client2SpecificData {
BaseClientData baseData = 1;
// other data specific to client1
}