Public cible
Débutants, étudiants et professionnels qui souhaitent acquérir une pratique structurée dans ce domaine.
Structurer une application avec des couches indépendantes, des dépendances explicites et des tests adaptés au domaine.
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+3
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.
Organiser une application pour que le domaine métier reste indépendant du HTTP, de la base et des détails techniques.
Le cours suit la frontière du domaine, les cas d’usage, la persistance et les tests d’assemblage.
Prérequis : Programmation orientée objet et notions HTTP, SQL et tests.
La couche présentation traduit les requêtes et les réponses. La couche application orchestre les cas d’usage. Le domaine contient les règles qui restent vraies sans framework. L’infrastructure fournit les implémentations techniques.
Une dépendance pointe vers une couche plus stable : le domaine ne connaît ni Doctrine, ni HTTP, ni le fournisseur de messagerie. Cette règle réduit les effets de bord et facilite les migrations.
Présentation → Application → Domaine ← Infrastructure
Un service applicatif représente une intention utilisateur ou métier. Il charge les objets nécessaires, vérifie les préconditions, applique les règles et renvoie un résultat explicite.
Ne pas placer toutes les requêtes dans un contrôleur : cela rend le cas d_usage difficile à réutiliser et à tester. Inversement, un service ne doit pas exposer directement les entités de persistance comme contrat public.
final class CreateOrderHandler { public function __invoke(CreateOrder $command): OrderResult { /* ... */ } }
Le repository traduit les besoins du domaine en requêtes. La transaction commence au plus près du cas d’usage et se termine après l’écriture cohérente de ses données.
Éviter les requêtes N+1, sélectionner uniquement les champs nécessaires et protéger les écritures concurrentes. Un rollback doit laisser la base dans son état initial et être observé dans les tests.
$this->connection->beginTransaction(); try { /* use case */; $this->connection->commit(); } catch (Throwable $e) { $this->connection->rollBack(); throw $e; }
Tester les règles métier avec des objets et des doublures simples, puis les repositories avec une base dédiée. Les tests d’intégration vérifient que l’assemblage réel fonctionne.
Documenter les décisions d’architecture avec un diagramme, les dépendances interdites et le sens de migration. Une règle non automatisée finit toujours par être contournée.
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