¿Por qué los ingenieros de Alibaba escriben buen código? Simplemente mire las especificaciones de su código y lo sabrá.
Una vez trabajé con un ingeniero de Java de Alibaba durante un tiempo. No se puede decir que su tecnología sea muy poderosa, pero su código es muy bueno. errores en las funciones que realizas. Tenía mucha curiosidad, así que a menudo le preguntaba algunos principios de diseño de código y luego me contaba el Manual de Java de Alibaba. Además, modificó este manual y se convirtió en un manual de desarrollo para nuestros programadores de Java. En este artículo, echemos un vistazo a los principios más importantes de este manual.
Obliga a que los nombres en el código no puedan comenzar ni terminar con un guión bajo o un signo de dólar.
Contraejemplo: _nombre / __nombre / $nombre / nombre_ / nombre$ / nombre__
Los tipos obligatorios están estrechamente conectados con corchetes para representar matrices.
Ejemplo positivo: definir matriz de enteros int[] arrayDemo; contraejemplo: en el parámetro principal, utilice String args[] para definir.
Es obligatorio no agregar su prefijo a las variables de tipo booleano en las clases POJO; de lo contrario, algún análisis del marco provocará errores de serialización.
Nota: El valor que expresa sí o no adopta el método de denominación de is_xxx, por lo que la relación de mapeo de is_xxx a xxx debe establecerse en .
Contraejemplo: un atributo definido como el tipo de datos básico booleano esDeleted, y su método también es isDeleted(). Cuando el marco RPC realiza un análisis inverso, "confunde" el nombre del atributo correspondiente, lo que resulta en un error. en la adquisición de atributos De lo contrario, se generará una excepción.
Recomendación: Al nombrar constantes y variables, poner el sustantivo que indica el tipo al final de la palabra para mejorar el reconocimiento.
Se recomienda que los métodos y propiedades en la clase de interfaz no agreguen ningún símbolo de modificación (tampoco agreguen público), mantenga el código simple y agregue comentarios Javadoc válidos. Intente no definir variables en la interfaz. Si debe definir variables, deben estar relacionadas con los métodos de la interfaz y son constantes básicas para toda la aplicación.
Ejemplo positivo: firma del método de interfaz void commit();
Constante básica de la interfaz String COMPANY = "alibaba"
Contraejemplo: definición del método de interfaz public abstract void; f();
Nota: Las interfaces en JDK8 permiten implementaciones predeterminadas, por lo que este método predeterminado es una implementación predeterminada valiosa para todas las clases de implementación.
Referencia El nombre de la clase de enumeración tiene el sufijo Enum, y los nombres de los miembros de la enumeración deben estar en letras mayúsculas, con guiones bajos que separen las palabras.
Nota: Las enumeraciones son en realidad clases especiales. Los miembros del dominio son todos constantes y el constructor está obligado a ser privado de forma predeterminada.
Ejemplo positivo: el nombre de miembro de la enumeración denominada ProcessStatusEnum: SUCCESS / UNKNOWN_REASON.
Convención de nomenclatura de referencia para cada capa:
1) Los métodos para obtener un solo objeto tienen el prefijo get.
2) Los métodos para obtener múltiples objetos tienen el prefijo list y la forma plural termina en: listObjects. 3) El método para obtener valores estadísticos tiene el prefijo recuento.
4) El método de inserción tiene el prefijo guardar/insertar.
5) El método de eliminación tiene el prefijo remove/delete.
6) El método de modificación tiene el prefijo actualización.
1) Objeto de datos: xxxDO, xxx es el nombre de la tabla de datos.
2) Objeto de transferencia de datos: xxxDTO, xxx es el nombre relacionado con el campo comercial.
3) Objeto de visualización: xxxVO, xxx es generalmente el nombre de la página web.
4) POJO es el nombre colectivo de DO/DTO/BO/VO, y está prohibido nombrarlo xxxPOJO.
Aplicación No se permite que aparezcan valores mágicos (es decir, constantes que no están predefinidas) directamente en el código.
Obligatorio Evite acceder a variables estáticas o métodos estáticos de esta clase a través de referencias de objetos de una clase, lo que aumentará innecesariamente los costos de análisis del compilador. Simplemente acceda a ellos directamente con el nombre de la clase.
Los parámetros variables Java obligatorios solo se pueden utilizar si tienen el mismo tipo de parámetro y el mismo significado comercial. Evite el uso de Objeto.
Nota: Los parámetros variables deben colocarse al final de la lista de parámetros. (Se recomienda a los estudiantes que eviten la programación de parámetros variables tanto como sea posible)
Obligatorio Todas las comparaciones de valores entre objetos de clase de empaquetado de enteros deben realizarse utilizando el método igual.
Nota: Para la asignación Integer var =? en el rango de -128 a 127, el objeto Integer se genera en IntegerCache.cache y los objetos existentes se pueden reutilizar. directamente = = para juzgar, pero todos los datos fuera de este rango se generarán en el montón y los objetos existentes no se reutilizarán. Este es un gran error. Se recomienda utilizar el método igual para juzgar.
Los estándares de uso para tipos de datos básicos y tipos de datos empaquetados son los siguientes:
Nota: Los atributos de clase POJO no tienen valores iniciales para recordar los usuarios cuando necesitan usarlos, usted debe asignar explícitamente el valor y el usuario garantiza cualquier problema de NPE o verificación de almacenamiento.
Ejemplo positivo: el resultado de la consulta de la base de datos puede ser nulo porque el unboxing y la recepción automática con tipos de datos básicos tienen riesgos de NPE.
Ejemplo de contador: por ejemplo, muestra el aumento y la caída del volumen total de transacciones, es decir, más o menos x%, x es el tipo de datos básico y el servicio RPC llamado cuando la llamada no tiene éxito. , devuelve el valor predeterminado y la página muestra 0% , lo cual no es razonable y debe mostrarse como un guión. Por lo tanto, el valor nulo del tipo de datos ajustado puede representar información adicional, como: falla de llamada remota y salida anormal.
Fuerza a la clase POJO a escribir en el método String.
Cuando utilice la herramienta en el IDE: fuente> genere toString, si hereda otra clase POJO, asegúrese de agregar super.toString al frente.
Nota: Cuando se produce una excepción durante la ejecución del método, puede llamar directamente al método toString() de POJO para imprimir los valores de sus atributos para facilitar la resolución de problemas.
Fuerce el procesamiento de hashCode y de iguales a seguir las siguientes reglas:
Descripción: String ha anulado los métodos de hashCode y de iguales, por lo que podemos usarlos Afortunadamente, los objetos String se utilizan como claves.
Los recursos de subprocesos obligatorios deben proporcionarse a través del grupo de subprocesos y no se permite la creación explícita de subprocesos en la aplicación.
Descripción: El beneficio del grupo de subprocesos es reducir el tiempo dedicado a crear y destruir subprocesos y la sobrecarga de los recursos del sistema, y resolver el problema de los recursos insuficientes. Si no se utiliza el grupo de subprocesos, puede hacer que el sistema cree una gran cantidad de subprocesos similares, lo que provocará un consumo de memoria o problemas de "cambio excesivo".
No se permite la creación de grupos de subprocesos forzados mediante Ejecutores, sino a través de ThreadPoolExecutor. Este método de procesamiento permite a los estudiantes que escriben tener más claras las reglas de ejecución del grupo de subprocesos y. evitar el consumo de recursos.
Las especificaciones anteriores son principios importantes en el diseño de código. Si sigue los principios anteriores al escribir código, la legibilidad y mantenibilidad del código mejorarán enormemente