我们正在引入协议缓冲区作为一些后端 RPC 服务的新传输。因为在不同形式的相似对象之间手动穿梭数据存在阻力,我可以预见协议缓冲区实例被向上传递到堆栈比仅仅传递到 RPC 服务器接口高一点。
这是我应该尽量避免的事情吗?将协议缓冲区对象视为普通数据持有者是否安全,并且可以快速有效地将其转换为二进制文件和从二进制文件中取出?
我认为它是生成数据对象的好方法的另一个原因是必需/可选字段的概念和自动生成的构建器界面。
我们正在引入协议缓冲区作为一些后端 RPC 服务的新传输。因为在不同形式的相似对象之间手动穿梭数据存在阻力,我可以预见协议缓冲区实例被向上传递到堆栈比仅仅传递到 RPC 服务器接口高一点。
这是我应该尽量避免的事情吗?将协议缓冲区对象视为普通数据持有者是否安全,并且可以快速有效地将其转换为二进制文件和从二进制文件中取出?
我认为它是生成数据对象的好方法的另一个原因是必需/可选字段的概念和自动生成的构建器界面。
好吧,由于它们是不可变的,因此以这种方式使用它们并不是非常方便——您可以传递构建器,但这会产生相当长的类型名称。这也意味着您受限于协议缓冲区(以及您自己的消息)支持的数据类型。
这样做是安全的,但它并不总是能创造出最好的设计。另一方面,有时这正是医生所要求的:)
我建议你尝试一下——这里没有“一刀切”。
通常,我设计系统的各个层,以便一层的实现细节不会泄漏到另一层。我没有 Google 的协议缓冲区的直接经验,但听起来您想在传输和系统的更高层使用相同的表示。
如果您决定停止使用 Protocol Buffers 作为传输表示,那么使用其他东西有多容易?