interface - 没有序列化的 Protobuf
问题描述
顾名思义,我想知道使用 Protobuf 是否有意义,而无需目前必须以任何形式序列化数据(将来可能会改变)。我的意思是将它们纯粹用作数据结构,将信息从一个函数传递到另一个函数,所有函数都在同一个地址空间中执行。或者你觉得这可能是一种矫枉过正并看到其他选择。
背景:我必须设计一个实现某些接口的库。目前,我的同事已经使用几个带参数的函数来实现它.. 示例:
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 的优势在于它们的序列化功能,我目前没有使用,你会选择在这些琐碎的任务中使用它们吗?
谢谢
解决方案
struct
如果有很多函数参数,则将它们分组为 a 是有意义的。readA
如果,readB
和readC
函数共享许多公共部分,那么将它们组合成一个函数是有意义的。
.proto
但是,如果您不打算将其用于序列化,则在我看来没有意义的是引入单独的文件和 protobuf 依赖项。大多数语言中已经存在将数据分组为可重用结构的类似功能。并且当您使用该语言的内置功能时,所有代码都保留在同一个位置,并且更易于理解。
推荐阅读
- json - 在angular6中操作json值后创建一个新的JSON
- sql - 为什么 POWER(2, 32) 会抛出错误?SQL
- ios - 快速尾随约束间距取决于超级视图的宽度乘以一个值(以编程方式)
- sql - 基于癌症发生列的患者计数
- react-native - 为什么 Youtube 视频没有在反应原生移动应用程序的 Webview 中显示?
- java - 使用 QueryDSL 和 PostgreSQL 数据库与 GroupBy 汇总
- odoo - 如何根据 Odoo 11 中的状态隐藏编辑按钮
- variables - 如何在 Informix 中检索活动 SAVEPOINT 的名称
- reactjs - 错误:在使用 react-redux 时,Provider 的钩子调用无效
- tensorflow - 对象检测:锚框的纵横比和比例