Flujo de Trabajo del Backend Quarkus BCE
Alcance y Límite del Directorio
- LÍMITE ESTRICTO: Operar SOLO dentro de
backend/. Nunca tocar archivos defrontend/. - Arquitectura: Patrón BCE estricto de Adam Bien (
com.app.<dominio>.{boundary, control, entity}). - Stack Tecnológico: Quarkus, Jakarta EE (
jakarta.*SOLAMENTE—nuncajavax.*oorg.springframework.*).
Puerta de Ejecución en 2 Fases
Fase 1: Contrato y Esqueleto (PARAR PARA REVISIÓN HUMANA)
entity: Crear/actualizarrecordinmutables de Java con carga útil (con@NotNull,@NotBlank,@Schema) y entidades JPA/Panache dentro de..<dominio>.entity. Cero dependencias decontroloboundary.boundary: Crear/actualizar firmas de recursos JAX-RS@Path(@Transactional,@RolesAllowed,@Operation) dentro de..<dominio>.boundary.- Pruebas: Crear/actualizar pruebas JUnit
@QuarkusTesto stubs de prueba unitaria fallidos enbackend/src/test/java/..<dominio>/boundary/. - PAUSA: Mostrar el diff de
entity,boundaryy las pruebas al usuario. Esperar la aprobación antes de escribir la implementación decontrol.
Fase 2: Implementación y Exportación del Esquema
control: Implementar la lógica de negocio dentro de..<dominio>.control(@ApplicationScoped). Nunca llamar directamente alcontrolde otro dominio; siempre a través de suboundary.- Verificar y Exportar Contrato: Ejecutar dentro de
backend/:./mvnw test
Reglas del Lenguaje Java 25 LTS y JVM (Obligatorias)
Apuntar exclusivamente a Java 25 LTS (<maven.compiler.release>25</maven.compiler.release>). Nunca escribir código boilerplate heredado de Java 8/11/17:
- Switch Exhaustivo y Deconstrucción de Registros (
controlyentity):- Modelar resultados del dominio y máquinas de estado usando
sealed interface+ implementaciones derecordenentity. - En
control, procesarlos usando expresionesswitchexhaustivas con deconstrucción de patrones de registro y cláusulaswhenguardadas (ej.,case PaidOrder(var id, var total) when total > 1000 -> ...). - NUNCA incluir una rama
defaulten unswitchpara unasealed interface, de modo que el compilador de Java 25 imponga la exhaustividad cuando se agreguen nuevos estados.
- Modelar resultados del dominio y máquinas de estado usando
- Cuerpos de Constructores Flexibles (JEP 513):
- Realizar validación rápida de fallos y normalización de datos directamente dentro de los constructores antes de llamar a
super(...)othis(...), en lugar de crear métodos auxiliares estáticos hinchados.
- Realizar validación rápida de fallos y normalización de datos directamente dentro de los constructores antes de llamar a
- Variables Sin Nombre (
_):- Usar siempre
_para parámetros lambda no utilizados, variables de excepción ignoradas o componentes de registros deconstruidos no utilizados (ej.,case Order(var id, _, _)).
- Usar siempre
- Hilos Virtuales y Valores de Ámbito (JEP 506):
- Para puntos finales de E/S bloqueantes en
boundaryde Quarkus, preferir@RunOnVirtualThreadsobre cadenas reactivasUni<T>a menos que se requiera streaming. - Nunca usar
ThreadLocal; siempre usarScopedValue<T>de Java 25 si se debe pasar estado contextual dentro de un ámbito de hilo.
- Para puntos finales de E/S bloqueantes en
- Colecciones Modernas y Recolectores de Streams (JEP 485):
- Usar métodos de
SequencedCollection(.getFirst(),.getLast(),.reversed()) en lugar de matemáticas de índicelist.get(list.size() - 1). - Usar
Stream.gather(Gatherers.windowFixed(...))en lugar de bucles de fragmentación manuales.
- Usar métodos de
- Sin Banderas de Vista Previa a Menos Que Se Solicite:
- Mantenerse en las características finalizadas de Java 25 LTS (no habilitar
--enable-previewpara JEP 507 de patrones primitivos o JEP 505 de concurrencia estructurada a menos que se solicite explícitamente).
- Mantenerse en las características finalizadas de Java 25 LTS (no habilitar