顾名思义我想知道使用Protobuf是否有意义,而不需要此刻以任何形式序列化数据(将来可能会改变)。我的意思是将它们纯粹用作数据结构,将信息从一个函数传递到另一个函数,所有函数都在同一个地址空间中执行。或者你觉得它可能是一个矫枉过正,并看到其他选择。
背景: 我必须设计一个实现某些接口的lib。目前,我的同事已经使用参数的几个函数实现了它。 示例:
void readA(int iIP1, int iIP2, Result& oOP)
void readB(std::string iIP1, Result& oOP)
void readC(std::vector<int> iIP1, Result& oOP)
我想更改它并提供一个界面功能:
void ReadFn(ReadMsg& ip, ReadResult& res);
数据结构在Protobuf中定义如下..
message ReadMsg {
enum ReadWhat {
A = 0;
B = 1;
C = 2;
}
message readA {
int32 iIP1 = 1;
int32 iIP2 = 2;
}
message readB {
string IP1 = 1;
}
message readC {
repeated int IP1 = 1;
}
oneof actRead {
readA rA = 1;
readB rB = 2;
readC rC = 3;
}
}
它提供了许多优于传统界面设计(使用功能)的优势,而且我的努力很少。如果将这些组件作为服务部署在不同的进程/机器中(当然还有其他实现),这将是未来的证据。但鉴于Protocol Buffers的优势在于它们的序列化功能,我现在还没有使用它,你会选择在这些琐碎的任务中使用它们吗?
谢谢
答案 0 :(得分:0)
如果有很多函数参数,可以将函数参数分组到struct
中。如果将readA
,readB
和readC
函数合并到一个函数中,如果它们共享许多公共部分,则将它们合并是有意义的。
然而,在我看来,如果您不打算将其用于序列化,那么引入单独的.proto
文件和protobuf依赖项是不合理的。在大多数语言中已经存在用于将数据分组成可重用结构的类似特征。当您使用该语言的内置功能时,所有代码都保留在同一位置并且更易于理解。