Protobuf没有序列化

时间:2018-06-14 21:35:34

标签: interface protocol-buffers

顾名思义我想知道使用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的优势在于它们的序列化功能,我现在还没有使用它,你会选择在这些琐碎的任务中使用它们吗?

谢谢

1 个答案:

答案 0 :(得分:0)

如果有很多函数参数,可以将函数参数分组到struct中。如果将readAreadBreadC函数合并到一个函数中,如果它们共享许多公共部分,则将它们合并是有意义的。

然而,在我看来,如果您不打算将其用于序列化,那么引入单独的.proto文件和protobuf依赖项是不合理的。在大多数语言中已经存在用于将数据分组成可重用结构的类似特征。当您使用该语言的内置功能时,所有代码都保留在同一位置并且更易于理解。