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
camelCasepara definir variables.
private String userName;1.4. Constantes y Enumeraciones
- Utiliza
SNAKE_CASE_CAPITALpara 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).
@Testpublic 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.