设计思考 – Protocol Buffers 3 为什么这样设计

💡 原文中文,约4000字,阅读约需10分钟。
📝

内容提要

协议缓冲区3移除了“必需”和“可选”关键字,允许在数据正确性上有更大的灵活性。它将空值和默认值视为等同,简化了设计并减少了存储空间。这与“少即是多”的原则一致。

🎯

关键要点

  • 协议缓冲区3移除了'required'和'optional'关键字,提供了更大的数据正确性灵活性。
  • 空值和默认值被视为等同,简化了设计并减少了存储空间。
  • 数据的正确性检查应由应用程序的每个角色自行负责,而不是由protobuf强制执行。
  • proto3将基本类型的null视为预设值,可能导致数据处理错误。
  • 谷歌的设计使得protobuf的基本类型更贴近主流静态语言,避免了动态语言中的常见错误。
  • 使用包装类型(如Int32Value)来表示可选字段,提供了类型检查的灵活性。
  • 删除'required'和'optional'关键字后,设计变得更加稳固,语义更精准,存储空间更精简。
  • 设计原则'少即是多'在协议缓冲区3中得到了体现。

延伸问答

Protocol Buffers 3 为什么移除了'required'和'optional'关键字?

因为数据的正确性检查应由应用程序的每个角色自行负责,而不是由protobuf强制执行。

Protocol Buffers 3 如何处理空值和默认值?

在proto3中,空值和默认值被视为等同,简化了设计并减少了存储空间。

使用Protocol Buffers 3时,如何表示可选字段?

可以使用包装类型(如Int32Value)来表示可选字段,提供类型检查的灵活性。

Protocol Buffers 3的设计原则是什么?

设计原则是'少即是多',强调简化设计以提高效率。

Protocol Buffers 3对基本类型的处理有什么特别之处?

proto3将基本类型的null视为预设值,这可能导致数据处理错误。

Protocol Buffers 3如何避免动态语言中的常见错误?

通过将基本类型设计得更贴近主流静态语言,避免了动态语言中的常见错误。

➡️

继续阅读