我们正在开发一些通过协议缓冲区相互通信的服务。所有的服务都是在.NET上编写的。我不打算将它们从.NET中迁移出去。我也不打算将相同的消息用于其他平台上的服务。
消息目前是用.proto编写的。代码生成步骤对我来说似乎是多余的。
除了跨平台兼容性(这不是我们关心的问题)之外,还有什么理由用.proto而不是直接用.NET语言编写消息吗?
给定您描述的设置(.NET到-.NET,不太可能需要跨平台),那么我会说"不"。我们做了很多符合这一类别的事情,我们只是先编写代码,即编写C#类型,然后使用它们。这为我们提供了对类型的全面控制和灵活性,并避免了不必要的构建/工具化步骤。
事实上,这实际上是protobuf-net的核心动机和目的:它能够在不需要DSL中定义的情况下从常规c#类型工作,就像所有其他.net序列化程序(XmlSerializer
、DataContractSerializer
、JavaScriptSerializer
等)一样。
请注意,虽然protobuf-net包含.GetProto<T>
特性,但它尚未在v2中重新实现;然而,现在跨平台预编译器已经完成并可以工作了,这是我列表中的下一个。我的观点是:如果成为跨平台等的需求,那么protobuf-net可能能够帮助您从现有合同中生成.proto。
如果您担心可能在某个时候需要与其他平台互操作,请坚持使用核心protobuf功能集。避免protobuf网络添加,如:
- 继承
- .NET特定的类型支持(
DateTime
、decimal
等) - 参考跟踪
- 动力式支架