如何为protobuf原型文件建模

问题描述

我的应用程序具有各种客户端(例如,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
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...