Skip to content

Java

Esta guía tiene como objetivo asegurar la consistencia, legibilidad y calidad del código en nuestros proyectos Java. Sigue estas directrices para mantener un estándar uniforme y facilitar la colaboración entre desarrolladores.

Code style

1. Convenciones Generales

1.1. Nombres de Paquetes

  • Paquetes: Utiliza camelCase, ya que se pueden confundir con una clase (Ejcom.quetzalli.sae).

1.2. Nombres de Clases

  • Clases: Usa pascalCase, para nombrar las clases, manteniendo paquetes en dominio invertido (com.startup.product).
public class UserSevice {}

1.3. Nombres de Variables

  • Variables: Emplea camelCase para definir variables.
private String userName;

1.4. Constantes y Enumeraciones

  • Utiliza SNAKE_CASE_CAPITAL para declarar constantes.
public static final int MAX_LOGIN_ATTEMPTS = 3;

1.5. Nombres de Métodos

  • Nombra los métodos en camelCase y documenta cada uno con Javadoc.
/**
* Retorna el nombre de usuario.
* @return el nombre de usuario.
*/
public String getUserName() {
return userName;
}

Pruebas

Las pruebas deben seguir el patron AAA (arrange, act, assert).

@Test
public void debeRetornarUsuarioSiExiste() {
// Arrange
Long userId = 1L;
when(userRepository.findById(userId)).thenReturn(Optional.of(new User()));
// Act
Optional<User> result = userService.findById(userId);
// Assert
assertTrue(result.isPresent());
verify(userRepository).findById(userId);
}

Manejo de errores

  • Estándares de Excepciones:
public class UsernameNotFoundException extends RuntimeException {
public UsernameNotFoundException(String s) {
super(s);
}
}
  • Logging: se debe utilizar un framework de logging como SLF4J y Logback, elige el nivel de logging adecuado para cada situación.
try {
// Lógica que podría fallar
} catch (UsernameNotFoundException e) {
log.warn("Recurso no encontrado: {}", id);
throw new ApiException("Recurso no encontrado", HttpStatus.NOT_FOUND);
} catch (Exception e) {
log.error("Error inesperado al procesar solicitud", e);
throw new ApiException("Error interno del servidor", HttpStatus.INTERNAL_SERVER_ERROR);
}

Documentación de API

  • Se debe documentar la API utilizando OpenAPI y Swagger.
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping("/{id}")
@Operation(summary = "Obtener usuario por ID",
description = "Retorna los datos de un usuario si existe")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Usuario encontrado"),
@ApiResponse(responseCode = "404", description = "Usuario no encontrado")
})
public ResponseEntity<UserDTO> getUserById(
@Parameter(description = "ID del usuario") @PathVariable Long id) {
// Implementación
}
}

Linting para java

  • Se debe utilizar un linter como Checkstyle o sonarqube para mantener la calidad del código.