2012-07-18 16 views
3

我們正在開發一些通過Protocol Buffers進行通信的服務。所有的服務都是用.NET編寫的。我沒有預見到將它們從.NET遷移出去。我沒有預見到在其他平臺上使用與服務相同的消息。在單一平臺系統上使用.proto文件是否有很好的理由?

的消息目前寫在.proto。代碼生成步驟對我來說似乎是多餘的。

除了跨平臺兼容性(這不是我們關心的),沒有任何理由來寫.proto而不是直接在.NET語言的消息?

回答

4

鑑於你所描述的設置(.NET到.NET,不太可能需要跨平臺),那麼我會說「不」。我們做了一個很多的事情,我們只是在代碼優先,即我們編寫C#類型,並使用它們。這使我們能夠對這些類型進行全面的控制和靈活性,並避免不必要的構建/加工步驟。實際上,這實際上是protobuf-net的核心動機 - 爲了和目的:它能夠像常規的c#類型一樣工作,而不需要在DSL中定義,就像所有其他的.NET序列化器一樣(XmlSerializerDataContractSerializer,JavaScriptSerializer等)。

注意的是,雖然protobuf網包括.GetProto<T>功能,這尚未在V2重新實現;但是,現在我的列表中已經完成了跨平臺預編譯器的工作。在這裏我想說的是:它是可能的,如果有變得做跨平臺等的要求,然後protobuf網或許能夠幫助生成從現有的合同爲您.proto。

如果您擔心可能在某些時候需要與其他平臺互操作,請堅持核心protobuf功能集。避免protobuf網添加物,如:

  • 繼承
  • .NET特定型支撐(DateTimedecimal等)
  • 參考跟蹤
  • 動態型支撐
+0

感謝您的回覆Marc。引發這個問題的是一些真正的可選字段,它們自然會映射到可空的。我跑過你的答案[這裏](http://stackoverflow.com/questions/4763875/does-protobuf-net-support-nullable-types)。定製xslt讓我覺得不簡單。我可能會更傾向於使用默認值或標誌來指示空值。您是否打算在.GetProto 中支持可空? – Watsontap 2012-07-18 08:17:23

+0

@Kenn我會*嘗試*支持任何我可以; p這將映射到.​​proto中的「可選」,這應該很好。 – 2012-07-18 08:19:32

+0

這將使.GetProto 不對稱的代碼生成器,如果我沒有記錯的話,考慮到發電機不映射到可選可空。 – Watsontap 2012-07-18 08:33:23

相關問題