usar uppercamelcase snake programacion notacion nomenclatura lowercamelcase estandares cuando convención convenciones camelcase camel java enums neo4j cypher

java - uppercamelcase - ¿Debo usar mayúsculas o camelcase en las enumeraciones de etiquetas?



notacion camelcase java (2)

El título lo dice todo.

En Cypher, el camelcase se usa para etiquetas. Por ejemplo :Car y :Bike . Los documentos API para Label usan mayúsculas al definir cada etiqueta en la enumeración, por lo que Label.CAR.name() siempre será CAR , no Car .

El uso de camelcase se ajusta más a las consultas de cifrado, pero esto entra en conflicto con el estándar de Java para nombrar miembros enum. Esto me obliga a usar etiquetas como Label.BIKE_SEAT lugar de Label.BikeSeat en mi base de datos de gráficos. ¿Cuál debería usar?

A pesar de que usar mayúsculas para los miembros de enum es la forma correcta de hacerlo en Java, todavía tengo un poco de curiosidad sobre por qué las personas Neo4j decidieron representar las etiquetas como enumeraciones.



Primer acercamiento a una solución

Para cumplir con la convención de Java, puedo anular Enum#toString() y usar eso en lugar de Enum#name() que no se puede anular. Entonces cada miembro tendrá un constructor con su etiqueta real Neo4j como se representa en la base de datos de gráficos:

public enum Label implements org.neo4j.graphdb.Label { CAR("Car"), BIKE("Bike"), BUS("Bus"); private String name; private Label(name) { this.name = name; } @Override public String toString() { return name; } }

Esto no funciona bien con métodos como GraphDatabaseService#findNodesByLabelAndProperty(Label, String, String) porque parece estar usando Label#name() para coincidir en lugar de Label#toString() por lo que no coincidirá con nodos que tengan camel case etiquetas en el db.

Mi solución de trabajo

Como la anulación de Enum#toString() no funciona y dado que Neo4j usa Label#name() para todo internamente, tendré que sobrescribirlo de todos modos. Así que terminé definiendo una clase que implementaba Label que puede anular Label#name() :

public class Label implements org.neo4j.graphdb.Label { public static final Label CAR = new Label("Car"); public static final Label BIKE = new Label("Bike"); public static final Label BUS = new Label("Bus"); private String name; private Label(String name) { this.name = name; } @Override public String name() { return name; } @Override public String toString() { return name; } }

Externamente, no se necesitan cambios en el lado del cliente utilizando la etiqueta previa enum.