Le package génère les fichiers PHP correctement, MAIS l'utilisateur doit encore:
- ✋ Configurer manuellement
doctrine.yaml(mappings + types) - ✋ Configurer manuellement
messenger.yaml(buses CQRS) - ✋ Configurer manuellement
services.yaml(bindings repositories) - ✋ Configurer manuellement
routes.yaml(découverte des contrôleurs) - ✋ Installer manuellement des packages (
symfony/uid,doctrine/fixtures, etc.)
Principe: Le bundle détecte et configure automatiquement tout ce qui manque.
// Chaque commande make:hexagonal:* vérifie et configure automatiquement
make:hexagonal:entity
→ Génère l'entité
→ Génère le mapping XML (au lieu de YML avec TODO)
→ Génère les types Doctrine pour les ValueObjects
→ Ajoute automatiquement dans doctrine.yaml (si absent)
→ Ajoute exclusion Domain/Model dans services.yaml
make:hexagonal:command
→ Génère Command + Handler
→ Configure automatiquement command.bus dans messenger.yaml (si absent)
make:hexagonal:controller
→ Génère Controller + Template
→ Configure automatiquement la route dans routes.yaml (si absent)
make:hexagonal:repository
→ Génère Port + Adapter
→ Ajoute automatiquement le binding dans services.yaml (si absent)Avantages:
- ✅ Zéro config manuelle
- ✅ L'utilisateur ne peut pas oublier une étape
- ✅ Expérience développeur optimale
- ✅ Le package devient vraiment "autonomous"
Inconvénients:
⚠️ Nécessite de parser/modifier les fichiers YAML⚠️ Risque de casser le fichier si mal codé (d'où les backups)
Implémentation: Voir ROADMAP-AUTONOMIE.md Sprint 1
Principe: Une commande unique configure tout au début.
# Une seule fois au début du projet
php bin/console make:hexagonal:init
# Configure automatiquement:
# - doctrine.yaml (structure de base)
# - messenger.yaml (command.bus + query.bus)
# - services.yaml (exclusions Domain)
# - routes.yaml (pattern de découverte)Ensuite, chaque commande make:hexagonal:* vérifie si la config existe et avertit si manquante.
Avantages:
- ✅ Plus simple à implémenter
- ✅ Moins risqué (une seule modification initiale)
- ✅ Configuration centralisée
Inconvénients:
⚠️ L'utilisateur doit penser à lancerinit⚠️ Ne détecte pas les ajouts manquants au fil du temps⚠️ Pas vraiment "autonomous"
Principe: Fournir un projet Symfony pré-configuré.
composer create-project ahmed-bhs/symfony-hexagonal-skeleton my-appLe projet contient déjà:
- ✅ Doctrine configuré pour hexagonal
- ✅ Messenger configuré pour CQRS
- ✅ Routes configurées
- ✅ Structure de base
- ✅ Exemples complets
Avantages:
- ✅ Très simple pour démarrer
- ✅ Zéro configuration
- ✅ Exemples fournis
Inconvénients:
⚠️ Ne fonctionne que pour nouveaux projets⚠️ Pas utilisable sur projet existant⚠️ Double maintenance (bundle + skeleton)
| Critère | Auto-config (1) | Init command (2) | Skeleton (3) |
|---|---|---|---|
| Autonomie | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| Facilité dev | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Projet existant | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐ |
| Complexité code | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Risque bugs | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Maintenance | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
-
Créer
make:hexagonal:init(quick win)- Configure tout en une fois
- Vérifiable avec
make:hexagonal:doctor - Sprint 0 (1 jour)
-
Implémenter auto-configuration progressive (meilleur long terme)
- Commencer par les Config Updaters
- Intégrer dans chaque commande make:hexagonal:*
- Sprint 1-2 (4-6 jours)
-
Ajouter commandes de diagnostic (qualité)
make:hexagonal:audit- vérifie fichiers obsolètesmake:hexagonal:doctor- vérifie config manquantemake:hexagonal:update- met à jour fichiers- Sprint 3 (2-3 jours)
-
[Optionnel] Créer skeleton (marketing)
- Pour vitrine et démos
- Pas prioritaire
- Sprint 4+ (2 jours)
// Vérifications:
✓ Doctrine ORM version (doit être 3.x pour XML)
✓ Mappings XML présents et configurés
✓ Types Doctrine enregistrés
✓ Buses Messenger configurés
✓ Routes configurées
✓ Bindings repositories présents
✓ Packages requis installés (symfony/uid, doctrine/fixtures)
// Output:
[OK] Configuration complete!
[WARNING] Missing doctrine type: habitant_id
→ Run: php bin/console make:hexagonal:fix
[ERROR] Messenger buses not configured
→ Run: php bin/console make:hexagonal:init// Auto-fix des problèmes détectés:
- Ajouter types Doctrine manquants
- Ajouter mappings manquants
- Ajouter bindings manquants// À faire dès maintenant dans les templates:
1. Générer XML au lieu de YML si Doctrine ORM >= 3
2. Auto-détecter les ValueObjects depuis properties (email → Email VO)
3. Générer les types Doctrine automatiquement
4. Améliorer le smart CommandHandler (support Update/Delete/etc)⚠️ YAML n'est plus supporté → utiliser XML⚠️ Classes doivent être non-final pour lazy ghost objects⚠️ Types personnalisés requis pour ValueObjects (pas de embedded)
- ✅ Toujours backup avant modifier un fichier config
- ✅ Vérifier existence avant ajouter (éviter doublons)
- ✅ Messages clairs et actionnables
- ✅ Proposer auto-fix quand possible
- ✅ Logger les modifications pour rollback
ROADMAP-AUTONOMIE.md- Plan détaillé d'implémentationsrc/Config/ConfigFileUpdater.php- Classe de basesrc/Config/DoctrineConfigUpdater.php- Updater Doctrine- À créer:
MessengerConfigUpdater.php,ServicesConfigUpdater.php,RoutesConfigUpdater.php
Un développeur doit pouvoir faire:
# Init projet (une seule fois)
composer require ahmed-bhs/hexagonal-maker-bundle --dev
php bin/console make:hexagonal:init
# Créer feature complète
php bin/console make:hexagonal:entity Cadeau Attribution Habitant \
--properties="prenom:string,nom:string,age:int,email:email"
php bin/console make:hexagonal:command Cadeau Attribution EnregistrerHabitant \
--properties="prenom:string,nom:string,age:int,email:email"
php bin/console make:hexagonal:controller Cadeau Attribution EnregistrerHabitant
# Vérifier
php bin/console make:hexagonal:doctor
# → [OK] Everything configured correctly! 🎉
# L'app fonctionne directement, sans aucune config manuelle!
symfony serve
# → http://127.0.0.1:8000 ✅C'est ça l'autonomie! 🚀