2010-11-08 24 views
6

Además de Google, que es bastante corta, proporcionó style guide, estas son mis ideas sobre cómo nombrar los mensajes del Buffer de Protocolo de Google.Convenciones de nomenclatura de Protobuf

  1. Use "Mensaje" al final de los nombres de los tipos de mensajes.

    • Esto hace que sea fácil ver en el código fuente que una clase es una clase generada por protobuf. Esto también tiene la ventaja de que si tengo una clase específica de dominio enriquecido, puede tener el nombre real, decir AddressBookMessage para la clase protobuf y AddressBook para la clase real.
  2. Para los usuarios de Java, parece que tener java_outer_classname fin en Protos es estándar.

    • no me di cuenta este principio, así que mis clases protobuf actuales están en com.example.project.protobuf.MyProtos, pero no veo una razón para mantenerlo allí teniendo en cuenta que tenemos que tener una clase que contiene, por lo que podría ser trasladado a com.example.protobuf.MyProtos a menos que no haya clases en el paquete superior del proyecto.
  3. Inicie enumeraciones en 0 para que coincida con C/C++.

  4. Use un nombre singular para un campo repetido.

    • La mayoría de los métodos generados suenan mejor con un nombre de campo singular, incluso si se repite, p. message-> add_child(), en lugar de message-> add_children() si uno tiene un campo secundario repetido.

¿Hay otras normas que la gente usa o se diferencian de éstos?

+0

¿Qué quiere decir con "Start enumeraciones a 0 para que coincida con C/C++" ? – bialix

+0

@bialix, asignando valores a los miembros enum, la página de estilo Protobuf los muestra comenzando en 1, ver "enum Foo" en http://code.google.com/apis/protocolbuffers/docs/style.html. Pero veo otros ejemplos comenzando en 0 en otras páginas. –

Respuesta

3

Descargo de responsabilidad: respuesta de un Googler que usa protobufs a diario. De ninguna manera estoy representando a Google de ninguna manera.

  1. No haga eso. Los búferes de protocolo compilados son solo una definición de clase especificada por el idioma que está utilizando, con algunas mejoras. agregar "Mensaje" es una verbosidad adicional. Normalmente, solo utiliza búferes de protocolo sin otras definiciones de clase, e incluso si usa otras definiciones de clases, simplemente importe java_outer_classname y haga un punto a partir de eso. Incluso puede poner la ruta completa de una cosa en el código para borrar una línea de importación, no hay problema.

  2. Aunque no se haya especificado oficialmente, suena como una buena sugerencia, porque normalmente colocas más de un proto dentro de una carpeta.

  3. Normalmente comienza con 0. Consulte la guía de idioma del búfer de protocolo.

  4. Sí. Lea lo siguiente para obtener una cierta sensación de usarlo: https://developers.google.com/protocol-buffers/docs/javatutorial

3

No estoy de acuerdo con la respuesta 4.En el artículo enlazado puedo encontrar sólo ejemplos de esta manera:

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

E incluso en https://developers.google.com/protocol-buffers/docs/proto3 sólo encontramos plurales:

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

El uso de un nombre de campo plural es redundante, ya que ya está indicado como 'repeat'. Para el ejemplo 'de resultados 'que citó, el compilador genera' getResults (int index) 'y' getResultsList() 'getters, lo cual es incómodo y posiblemente engañoso, especialmente si está usando un lenguaje dinámico. Idealmente, el compilador sería inteligente al respecto, inferir la forma singular del nombre de campo plural, y generar 'getResult (int)' y 'getResults()'. Pero eso también podría ser confuso por sí mismo, e incurriría en cálculos innecesarios. – olebebo

Cuestiones relacionadas