2010-11-08 6 views
6

Помимо довольно короткого Google, предоставленного style guide, вот мои мысли об именовании сообщений буфера протокола Google.Соглашения об именовании Protobuf

  1. Используйте «Сообщение» в конце имен типов сообщений.

    • Это позволяет легко увидеть в исходном коде, что класс является порожденным протобуфом классом. Это также имеет то преимущество, что если у меня есть класс с богатым доменом, то он может иметь настоящее имя, например AddressBookMessage для класса protobuf и AddressBook для реального класса.
  2. Для пользователей Java, кажется, что с java_outer_classname конец в Protos является стандартным.

    • я не замечал этого изначально, так что мои нынешние классы Protobuf в com.example.project.protobuf.MyProtos, но я не вижу причин, чтобы держать его там, учитывая, что нам нужно иметь вмещающий класс, поэтому он может быть перемещен до com.example.protobuf.MyProtos, если в верхнем пакете проекта нет классов.
  3. Начать перечисление в 0 для соответствия C/C++.

  4. Используйте уникальное имя для повторного поля.

    • Большинство генерируемых методов лучше звучат с уникальным именем поля, даже если оно повторяется, например. message-> add_child(), а не message-> add_children(), если у вас было повторное дочернее поле.

Существуют ли какие-либо другие стандарты люди используют или отличаются от них?

+0

Что вы имеете в виду под «Start перечислений на 0, чтобы соответствовать C/C++» ? – bialix

+0

@bialix, присваивая значения элементам перечисления, страница стиля Protobuf показывает их начиная с 1, см. «Enum Foo» по адресу http://code.google.com/apis/protocolbuffers/docs/style.html. Но я вижу другие примеры, начиная с 0 на других страницах. –

ответ

3

Отказ от ответственности: ответ от Googler с использованием protobufs на ежедневной основе. Я никоим образом не представляю Google.

  1. Не делайте этого. Скомпилированные буферы протокола - это просто определение класса, указанное на используемом вами языке, с некоторыми улучшениями. добавление «Сообщение» - дополнительная многословие. Обычно вы просто используете буферы протокола без других определений классов, и даже если вы используете другие определения классов, просто импортируйте java_outer_classname и сделайте точную точку. Вы даже можете поместить полный путь в код для стирания одной строки импорта, без проблем.

  2. Хотя официально не указано, это звучит неплохо, потому что обычно вы помещаете в папку несколько прототипов.

  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

Использование имени множественного поля является избыточным, так как оно уже указано как 'repeat'. В приведенном примере «результатов» компилятор генерирует «getResults (int index)» и 'getResultsList()' getters, что неудобно и, возможно, вводит в заблуждение, особенно если вы используете динамический язык. В идеале компилятор был бы разумным в этом вопросе, вывел бы исключительную форму из имени множественного поля и сгенерировал 'getResult (int)' и 'getResults()'. Но это может также сбивать с толку само по себе и потребовало бы ненужных вычислений. – olebebo

Смежные вопросы