Que fait Workflow Backend Quarkus BCE ?
Périmètre & Frontière du Répertoire
- FRONTIÈRE STRICTE : Opérez UNIQUEMENT dans
backend/. Ne touchez jamais aux fichiersfrontend/. - Architecture : Pattern BCE strict d'Adam Bien (
com.app.<domaine>.{boundary, control, entity}). - Stack Technique : Quarkus, Jakarta EE (
jakarta.*UNIQUEMENT—jamaisjavax.*ouorg.springframework.*).
Porte d'Exécution en 2 Phases
Phase 1 : Contrat & Épine Dorsale (ARRÊT POUR RÉVISION HUMAINE)
entity: Créer/mettre à jour desrecordJava immuables (avec@NotNull,@NotBlank,@Schema) et des entités JPA/Panache dans..<domaine>.entity. Zéro dépendance enverscontrolouboundary.boundary: Créer/mettre à jour les signatures des ressources JAX-RS@Path(@Transactional,@RolesAllowed,@Operation) dans..<domaine>.boundary.- Tests : Créer/mettre à jour des squelettes de tests JUnit
@QuarkusTestou tests unitaires échouants dansbackend/src/test/java/..<domaine>/boundary/. - PAUSE : Affichez le diff de
entity,boundaryet des tests à l'utilisateur. Attendez l'approbation avant d'écrire l'implémentation decontrol.
Phase 2 : Implémentation & Export du Contrat
control: Implémentez la logique métier dans..<domaine>.control(@ApplicationScoped). N'appelez jamais directement lecontrold'un autre domaine ; passez toujours par sonboundary.- Vérifier & Exporter le Contrat : Exécutez dans
backend/:./mvnw test
Règles du Langage & de la JVM Java 25 LTS (Obligatoires)
Ciblez exclusivement Java 25 LTS (<maven.compiler.release>25</maven.compiler.release>). N'écrivez jamais de code passe-partout Java 8/11/17 :
- Switch Exhaustif & Déconstruction de Record (
control&entity) :- Modélisez les résultats du domaine et les machines d'état avec
sealed interface+ implémentationsrecorddansentity. - Dans
control, traitez-les avec des expressionsswitchexhaustives utilisant la déconstruction de record et des clauseswhengardées (ex. :case PaidOrder(var id, var total) when total > 1000 -> ...). - N'incluez JAMAIS de branche
defaultsur un switchsealed interfacepour que le compilateur Java 25 impose l'exhaustivité lors de l'ajout de nouveaux états.
- Modélisez les résultats du domaine et les machines d'état avec
- Corps de Constructeurs Flexibles (JEP 513) :
- Effectuez la validation rapide et la normalisation des données directement dans les constructeurs avant d'appeler
super(...)outhis(...)plutôt que de créer des méthodes statiques auxiliaires volumineuses.
- Effectuez la validation rapide et la normalisation des données directement dans les constructeurs avant d'appeler
- Variables Non Nommées (
_) :- Utilisez toujours
_pour les paramètres lambda inutilisés, les variables d'exception ignorées ou les composants de record déconstruits inutilisés (ex. :case Order(var id, _, _)).
- Utilisez toujours
- Threads Virtuels & Valeurs Scopées (JEP 506) :
- Pour les points de terminaison d'E/S bloquants dans Quarkus
boundary, préférez@RunOnVirtualThreadaux chaînes réactivesUni<T>sauf si le streaming est requis. - N'utilisez jamais
ThreadLocal; utilisez toujoursScopedValue<T>de Java 25 si un état contextuel doit être transmis dans un scope de thread.
- Pour les points de terminaison d'E/S bloquants dans Quarkus
- Collections Modernes & Gatherers de Flux (JEP 485) :
- Utilisez les méthodes
SequencedCollection(.getFirst(),.getLast(),.reversed()) plutôt que les calculs d'indexlist.get(list.size() - 1). - Utilisez
Stream.gather(Gatherers.windowFixed(...))plutôt que des boucles de segmentation manuelles.
- Utilisez les méthodes
- Pas de Flags Preview Sauf Demande :
- Tenez-vous-en aux fonctionnalités finalisées de Java 25 LTS (n'activez pas
--enable-previewpour JEP 507 (pattern primitifs) ou JEP 505 (concurrence structurée) sauf demande explicite).
- Tenez-vous-en aux fonctionnalités finalisées de Java 25 LTS (n'activez pas