Public cible
Débutants, étudiants et professionnels qui souhaitent acquérir une pratique structurée dans ce domaine.
Découper un domaine en services réutilisables, explicites et testables avec des contrats et une gestion fiable des erreurs.
Débutants, étudiants et professionnels qui souhaitent acquérir une pratique structurée dans ce domaine.
Comprendre les notions essentielles et les appliquer dans un projet vérifiable.
Aucune connaissance préalable n’est strictement obligatoire ; les prérequis détaillés sont précisés dans les ateliers.
Bac+2
La validation repose sur les évaluations actives et les livrables pratiques du cours.
Un ordinateur, un navigateur et les outils indiqués dans le premier atelier sont suffisants pour commencer.
Construire une bibliothèque métier documentée.
Livrables :
Découper un domaine en composants cohérents, réutilisables et testables, puis les intégrer sans créer de dépendances cachées.
Le cours articule responsabilités, contrats, erreurs et tests d’intégration.
Prérequis : Programmation orientée objet, exceptions et tests unitaires.
Un composant doit avoir une raison claire d’exister et une seule responsabilité principale. Un service qui valide, envoie un e-mail, modifie la base et construit une réponse devient difficile à tester.
Regrouper les règles qui évoluent ensemble, puis séparer les adaptateurs techniques. Le nom de la classe doit décrire le cas d’usage plutôt qu’un détail d’implémentation.
PricingService, OrderWorkflow, NotificationPort
Définir les entrées, sorties, erreurs et effets attendus. Une interface de port permet au domaine de dépendre d’une capacité sans connaître le fournisseur choisi.
Rendre les dépendances explicites par injection et éviter les services globaux. Une dépendance optionnelle doit avoir un comportement défini, pas une valeur surprise.
interface PaymentPort { public function charge(Money $amount, PaymentReference $reference): Receipt; }
Distinguer une règle métier refusée, une dépendance indisponible et une erreur technique. Les notifications et la journalisation ne doivent pas masquer l’échec principal.
Rendre les effets de bord idempotents lorsqu’un retry est possible. Enregistrer un identifiant de corrélation et conserver une trace de la décision prise.
Tester le contrat public et les règles aux frontières. Un test doit d’abord vérifier le résultat, puis les effets attendus.
Documenter les exemples, les préconditions et les raisons des décisions. Une API interne sans contrat écrit devient un piège pour l’équipe suivante.
it('refuse une commande déjà payée', fn () => expect($handler(...))->toThrow(DomainException::class));
Le livrable doit montrer une compréhension personnelle, des choix explicités et une vérification par un cas de test ou une procédure reproductible.
Publié le 29/11/2025