2010-11-08 229 views
6

除了Google提供的相當短的style guide之外,這裏還有關於命名Google Protocol Buffer消息的想法。Protobuf命名約定

  1. 在消息類型名稱末尾使用「消息」。

    • 這使得在源代碼中很容易看到類是protobuf生成的類。這也有一個好處,如果我有一個豐富的域特定的類,那麼它可以有真實的名字,比如AddressBookMes​​sage的protobuf類和AddressBook的真實類。
  2. 對於Java的用戶,它似乎在Protos具有java_outer_classname端是標準的。

    • 我開始並沒有注意到這一點,所以我目前的protobuf類是com.example.project.protobuf.MyProtos,但我不明白了一個道理,以保持它有鑑於我們需要有一個包含類,因此它可以被移動到com.example.protobuf.MyProtos,除非項目的頂層包中沒有類。
  3. 在0開始枚舉以匹配C/C++。

  4. 對重複字段使用單數名稱。

    • 大多數生成的方法在使用單個字段名稱時聽起來會更好,即使它是重複的,例如, message-> add_child(),而不是message-> add_children()(如果有一個重複的子字段)。

是否有任何其他標準的人使用或從這些有什麼不同?

+0

你是什麼意思「在0開始枚舉匹配C/C++」的意思? – bialix 2010-11-09 16:14:13

+0

@bialix,爲枚舉成員賦值,Protobuf樣式頁面從1開始顯示它們,請參閱http://code.google.com/apis/protocolbuffers/docs/style.html中的「enum Foo」。但我看到其他頁面上從0開始的其他示例。 – 2010-11-09 18:12:25

回答

3

免責聲明:每天使用protobufs的Google員工的答案。我絕不代表Google。

  1. 不這樣做。編譯的協議緩衝區只是您正在使用的語言指定的類定義,並進行了一些改進。增加「消息」是額外的冗長。通常你只需要使用沒有其他類定義的協議緩衝區,即使你使用其他的類定義,只需導入java_outer_classname並從中做點。你甚至可以在代碼中放置一個東西的完整路徑來擦除一行導入,沒問題。

  2. 雖然沒有正式指定,但這聽起來像是一個很好的建議,因爲通常你會在一個文件夾中放置多個proto。

  3. 通常以0開頭。請參閱協議緩衝區語言指南。

  4. 是的。閱讀下面有一些使用它的感覺:https://developers.google.com/protocol-buffers/docs/javatutorial

3

我不同意答案4。在鏈接的文章中,我只能找到的例子是這樣的:

repeated PhoneNumber phones = 4; 
repeated Person people = 1; 

即使在https://developers.google.com/protocol-buffers/docs/proto3我們只找複數:

repeated Result results = 1; 
repeated string snippets = 3; 
+0

使用複數字段名稱是多餘的,因爲它已被指示爲「重複」。對於你引用的'results'例子,編譯器生成'getResults(int index)'和'getResultsList()'getters,這很尷尬,可能會誤導你,特別是如果你使用的是動態語言。 理想情況下,編譯器將會對其進行智能化,從複數字段名稱中推斷出單數形式,並生成'getResult(int)'和'getResults()'。但這也可能會讓人感到困惑,並且會招致不必要的計算。 – olebebo 2017-08-17 09:32:48