Communitygithub.com

Workflow Backend Quarkus BCE

Conçoit, structure et implémente des fonctionnalités backend Java Quarkus / Jakarta EE dans le répertoire backend/ en utilisant le pattern Strict Boundary-Control-Entity (BCE). Activez cette compétence lors de la construction ou modification de logique métier backend, de points de terminaison REST ou d'entités de base de données.

Qu'est-ce que Workflow Backend Quarkus BCE ?

Cette compétence guide un agent IA dans le développement backend Java avec Quarkus et Jakarta EE, en suivant rigoureusement le pattern BCE (Boundary-Control-Entity) d'Adam Bien. Elle impose une séparation stricte des domaines et l'utilisation exclusive de `jakarta.*` (pas de `javax.*` ni `spring`). Le workflow est divisé en deux phases : la phase 1 crée les squelettes (entités, interfaces Boundary, tests) et s'arrête pour validation humaine avant d'implémenter la logique métier ; la phase 2 implémente le contrôle (logique métier) et exécute les tests. La compétence cible exclusivement Java 25 LTS, utilisant des fonctionnalités modernes comme les switchs exhaustifs avec `sealed interface`, les constructeurs flexibles (JEP 513), les variables non nommées (`_`), les threads virtuels (`@RunOnVirtualThread`, `ScopedValue`), et les collections séquencées (`SequencedCollection`). Elle interdit les anciennes pratiques Java 8/11/17 et les preview flags sauf demande explicite. Utile pour tout projet backend nécessitant une architecture BC robuste et des fonctionnalités Java modernes.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ben-eddy74/agent-skills/tree/HEAD/quarkus-bce-backend

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

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 fichiers frontend/.
  • Architecture : Pattern BCE strict d'Adam Bien (com.app.<domaine>.{boundary, control, entity}).
  • Stack Technique : Quarkus, Jakarta EE (jakarta.* UNIQUEMENT—jamais javax.* ou org.springframework.*).

Porte d'Exécution en 2 Phases

Phase 1 : Contrat & Épine Dorsale (ARRÊT POUR RÉVISION HUMAINE)

  1. entity : Créer/mettre à jour des record Java immuables (avec @NotNull, @NotBlank, @Schema) et des entités JPA/Panache dans ..<domaine>.entity. Zéro dépendance envers control ou boundary.
  2. boundary : Créer/mettre à jour les signatures des ressources JAX-RS @Path (@Transactional, @RolesAllowed, @Operation) dans ..<domaine>.boundary.
  3. Tests : Créer/mettre à jour des squelettes de tests JUnit @QuarkusTest ou tests unitaires échouants dans backend/src/test/java/..<domaine>/boundary/.
  4. PAUSE : Affichez le diff de entity, boundary et des tests à l'utilisateur. Attendez l'approbation avant d'écrire l'implémentation de control.

Phase 2 : Implémentation & Export du Contrat

  1. control : Implémentez la logique métier dans ..<domaine>.control (@ApplicationScoped). N'appelez jamais directement le control d'un autre domaine ; passez toujours par son boundary.
  2. 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 :

  1. Switch Exhaustif & Déconstruction de Record (control & entity) :
    • Modélisez les résultats du domaine et les machines d'état avec sealed interface + implémentations record dans entity.
    • Dans control, traitez-les avec des expressions switch exhaustives utilisant la déconstruction de record et des clauses when gardées (ex. : case PaidOrder(var id, var total) when total > 1000 -> ...).
    • N'incluez JAMAIS de branche default sur un switch sealed interface pour que le compilateur Java 25 impose l'exhaustivité lors de l'ajout de nouveaux états.
  2. Corps de Constructeurs Flexibles (JEP 513) :
    • Effectuez la validation rapide et la normalisation des données directement dans les constructeurs avant d'appeler super(...) ou this(...) plutôt que de créer des méthodes statiques auxiliaires volumineuses.
  3. 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, _, _)).
  4. Threads Virtuels & Valeurs Scopées (JEP 506) :
    • Pour les points de terminaison d'E/S bloquants dans Quarkus boundary, préférez @RunOnVirtualThread aux chaînes réactives Uni<T> sauf si le streaming est requis.
    • N'utilisez jamais ThreadLocal ; utilisez toujours ScopedValue<T> de Java 25 si un état contextuel doit être transmis dans un scope de thread.
  5. Collections Modernes & Gatherers de Flux (JEP 485) :
    • Utilisez les méthodes SequencedCollection (.getFirst(), .getLast(), .reversed()) plutôt que les calculs d'index list.get(list.size() - 1).
    • Utilisez Stream.gather(Gatherers.windowFixed(...)) plutôt que des boucles de segmentation manuelles.
  6. Pas de Flags Preview Sauf Demande :
    • Tenez-vous-en aux fonctionnalités finalisées de Java 25 LTS (n'activez pas --enable-preview pour JEP 507 (pattern primitifs) ou JEP 505 (concurrence structurée) sauf demande explicite).

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills associés