SlideShare une entreprise Scribd logo
Design Applicatif avec Symfony
Zoom sur la Clean Architecture
Romain Kuzniak

CTO @ OpenClassrooms
Nous sommes tous un jour
confrontés à un problème
de design des applications
• Rigidité (difficulté de faire les changements)
• Fragilité (bugs issus des changements)
• Immobilité (réutilisation)
• Viscosité (difficulté de faire les bonnes choses, design,
environnement, temps de compilation, déploiements, tests…)
Un bon design est un
design qui favorise le
changement
Cas d’étude
• Application de gestion d’un tableau agile
• Cas d’utilisation : fermeture d’un sprint avec génération
d’un rapport
• Manuelle par l’utilisateur via l’interface web ou une API
• Automatique à la fin du sprint via un cron
Design applicatif avec symfony - Zoom sur la clean architecture - Symfony Live
• Input :
• Opération explicite de l’utilisateur (web ou api)
• Scénario :
• Récupérer le sprint
• Pour toutes les tâches dont le statut est « Done » :
• Fermer la tâche :
• Passer le statut à « Close »
• Ajouter la date de fermeture de la tâche
• Ajouter la date de fermeture du sprint
• Sortir toutes les autres tâches du sprint
• Générer le rapport de sprint
• Nombre de tâches fermées au cours du sprint
• Nombre de tâches moyennes fermées au cours de tous les sprints
• Output :
• Rapport de sprint
Design applicatif avec symfony - Zoom sur la clean architecture - Symfony Live
Une règle métier est un comportement
(généralement lié à une entité)
disponible à travers toute l’application
Tâche
• Fermer une tâche
• Passer le statut à « Close »
• Ajouter la date de fermeture de la tâche
Sprint
• Fermer le sprint
• Pour toutes les tâches du sprint dont le statut est « Done » :
• Fermer la tâche
• Ajouter la date de fermeture du sprint
• Sortir toutes les autres tâches du sprint
Une règle applicative est une fonctionnalité
du domaine, liée à une ou plusieurs
entités, dans un contexte donné
• Récupérer un sprint
• Fermer le sprint
• Récupérer les données nécessaires au rapport
• 3 actions
• Via le web
• Via l’api
• Via une commande à la fin du sprint
• 2 règles applicatives
• Fermer un sprint
• Fermer le sprint courant
• 2 règles métiers
• Tâche : fermer la tâche
• Sprint : fermer le sprint
• 1 critère : capacité de changement
• 4 enjeux :
• la gestion des règles métiers
• la gestion des règles applicatives
• le couplage du domaine et de la Vue
• le couplage avec l’Infrastructure (accès aux données,
framework…)
MVC
• Trygve Reenskaug, Xerox Parc, 70’s
• GUI pattern à l’origine
• Principes :
• Séparer les données du traitement de la présentation
Controller
Vue
Model
Pattern Original (UI)
Vue
Entité
Repository
Controller
Model
Sprint
Entité = POPO
Sprint Repository
Controller
Web Controller
Règles applicatives
Règles métiers
Présentation
Accès aux données
Indice de changement : BAD
• Simple
• Documenté
• Totalement compatible
avec Symfony
• Aucune gestion des règles métiers
• Aucune gestion des règles
applicatives
• Pas de séparation des données
du domaine et de la vue
• Couplage fort avec l’infrastructure
Service Layers
• John J. Donovan, Open Environment Corporation, 90’s
• Grande popularité dans les applications de gestion
• Objectifs :
• Créer une application flexible
• Indépendance entre la présentation, la logique du
domaine et l’accès aux données
• Principe :
• Séparation en couches
Présentation
Data
Business
Service
Controller Vue
Vue
Entité
Repository
ControllerService
Data layer
Sprint
Entité = POPO
Sprint Repository
Business layer
Sprint Service
Règles applicatives
Règles métiers Tâche
Accès aux données
Règles métiers Sprint
Presentation layer
Web Controller
Indice de changement : MEDIUM
• Séparation Data /
Domaine / Présentation
• Documenté
• Totalement compatible
avec Symfony
• Couplage entre les règles
métiers et les règles
applicatives
• Pas de séparation des données
du domaine et de la vue
• Couplage fort avec
l’infrastructure
Domain Driven
Design
• Eric Evans, 2004
• Objectifs :
• Gérer des architectures complexes
• Indépendance avec le framework
• Indépendance avec l’UI
• Indépendance avec la base de données
• Testable
• Principe :
• Placer le domaine au centre de l’application
Presentation
Application
Domain
Infrastructure
• Ubiquitous Language
• Model Driven Design
• Entities
• Value Object
• Root Aggregates
• Services
• Repositories
• Cohabitation avec :
• AOP
• CQRS
Presentation
Application
Domain
Infrastructure
Repository Impl Service Impl …
Entity Value Object ServiceRepository
Service
Controller Vue
Domain Layer
Tâche
Sprint
Sprint Repository
Application Layer
Sprint Service
Injection de dépendances
AOP pour la gestion des transactions
Presentation Layer
Web Controller
Infrastructure Layer
Sprint Repository (Implémentation)
Indice de changement : GOOD
• Séparation Métier / Applicatif /
Présentation
• Séparation de l’infrastructure
(Framework, Base de
données…)
• Compatible avec Symfony
mais un peu de plomberie
• Beaucoup de classes
• Coût de développement
• Pas de SRP dans la
couche Application
Clean Architecture
• Robert C. Martin, 2008
• Objectifs :
• Gérer des architectures complexes
• Indépendance avec le framework
• Indépendance avec l’UI
• Indépendance avec la base de données
• Testable
• Principe :
• Placer le domaine au centre de l’application
• Communication entre les couches à travers des abstractions
• Application des principes S.O.L.I.D
• Architecture révélant son intention
Use Case
Controller
Presenter
View
Model
View
Request
Model
Response
Model
<I>Boundary
<I>Entity
Gateway
<A>Entity
Entity
Implementation
Gateway
Implementation
<I>Boundary
Entité
Sprint (Abstract)
Sprint (Implémentation)
Gateway
Sprint Gateway
Sprint Repository (Implémentation)
Use Case
Close Sprint
Close Sprint Response
Close Sprint Response DTO
Controller
Web Controller
Indice de changement : EXCELLENT
• Séparation Métier / Applicatif /
Présentation
• Séparation de l’infrastructure
(Framework, Base de données…)
• Principes S.O.L.I.D.
• Architecture révélant son intention
• Compatible avec Symfony
• Encore plus de classes
• Plomberie
• Coût de développement
• Peu documenté (mais cela
s’améliore)
Retour d’expérience
chez OpenClassrooms
Plus de 4 ans après
• Suppression de la rigidité, fragilité, immobilité, viscosité
• Infrastructure, Frameworks et librairie parfaitement
découplés
• Périmètre des tests adapté
• Environnement (déploiements, temps d'exécution des
tests…)
• Orientation fonctionnelle
• Productivité linéaire
• Aptitude au changement
• Courbe d’apprentissage longue et complexe
• Peu de documentation
• Peu de retours d’expérience
• Peu de développeurs formés
• Quantité de code
• Plomberie
• Beaucoup de code pour générer un Use Case
Devez-vous utiliser la
Clean Architecture ?
Évolution de la productivité
MVC n-tiers DDD Clean Architecture
• Soyez pragmatique
• Quelle taille d’application ?
• Quelle durée de développement ?
• Refactoring
Quelques mots sur
Symfony…
• Du bootstrap à l’architecture la plus avancée
• Tous les composants pour tous les besoins
• Standardisés !
• Montées de versions pérennes
Merci

Contenu connexe

PDF
Retour opérationnel sur la clean architecture
PDF
Clean Architecture
PDF
Intégration continue et déploiement continue avec Jenkins
PPT
N Unit Presentation
PPTX
PPSX
SOLID Principles and The Clean Architecture
PPT
Selenium
PPTX
Micro Front Ends : Divided We Rule by Parth Ghiya - AhmedabadJS
Retour opérationnel sur la clean architecture
Clean Architecture
Intégration continue et déploiement continue avec Jenkins
N Unit Presentation
SOLID Principles and The Clean Architecture
Selenium
Micro Front Ends : Divided We Rule by Parth Ghiya - AhmedabadJS

Tendances (20)

PPT
Selenium ppt
PPT
SOLID Design Principles
PPTX
Clean code: SOLID
PPTX
Design pattern-presentation
PDF
PPTX
Clean architecture
PPTX
Introduction à React JS
PPTX
Testing microservices with rest assured
PPTX
La virtualisation
PPTX
Introduction à Symfony
PDF
Cypress, Playwright, Selenium, or WebdriverIO? Let the Engineers Speak!
PPTX
MVC, MVP e MVVM: Uma Comparação de Padrões Arquiteturais
PPTX
Introduction to selenium
KEY
Selenium Grid
PPTX
SOLID Principles
PPTX
Solid principles
PPTX
Selenium ppt
PPTX
Learning solid principles using c#
PPTX
Introduction aux architectures des SI
PPTX
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
Selenium ppt
SOLID Design Principles
Clean code: SOLID
Design pattern-presentation
Clean architecture
Introduction à React JS
Testing microservices with rest assured
La virtualisation
Introduction à Symfony
Cypress, Playwright, Selenium, or WebdriverIO? Let the Engineers Speak!
MVC, MVP e MVVM: Uma Comparação de Padrões Arquiteturais
Introduction to selenium
Selenium Grid
SOLID Principles
Solid principles
Selenium ppt
Learning solid principles using c#
Introduction aux architectures des SI
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
Publicité

Similaire à Design applicatif avec symfony - Zoom sur la clean architecture - Symfony Live (20)

PDF
Design applicatif avec symfony2
PPTX
Mobilité && SAP
PPTX
Objectif fluid&lt;fab />
PPTX
Meetup Devops Geneve 06/17- EBU Feedbacks
PDF
Saas Libre
PPTX
Bonita 7.10 - Nathalie Cotté - Bonitaday Paris 2019
PPTX
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
PPTX
aOS Genève - Session - New Experience & SharePoint Framework
PPTX
7 Session Aerow - New experience and SharePoint Framework
PPTX
Gab17 lyon-rex build dev ops sur une infra iaas-paas multisite-by-matthieupetite
PPTX
Accéder au développement Dot.Net et Asp.Net
PPTX
Patterns pour porter son code SharePoint vers Office 365 (SharePoint Saturday...
PDF
Nuxeo en mode cloud SWORD Group - Nuxeo Tour 2014
PPTX
TechDays 2012 - Windows Azure
PPTX
Au coeur du framework .net 4.5.1
PPTX
6 Session Aerow - New experience and SharePoint framework
PPTX
aOS Toulouse - Session - New Experience & SharePoint Framework
PDF
Sw 100 fr docker conteneurisation des applications
PPTX
Au cœur du Framework .NET 4.5.1
PDF
Cours 1 les principes de base
Design applicatif avec symfony2
Mobilité && SAP
Objectif fluid&lt;fab />
Meetup Devops Geneve 06/17- EBU Feedbacks
Saas Libre
Bonita 7.10 - Nathalie Cotté - Bonitaday Paris 2019
[Scrum Day 2011] Outillage Agile dans un environnement Microsoft
aOS Genève - Session - New Experience & SharePoint Framework
7 Session Aerow - New experience and SharePoint Framework
Gab17 lyon-rex build dev ops sur une infra iaas-paas multisite-by-matthieupetite
Accéder au développement Dot.Net et Asp.Net
Patterns pour porter son code SharePoint vers Office 365 (SharePoint Saturday...
Nuxeo en mode cloud SWORD Group - Nuxeo Tour 2014
TechDays 2012 - Windows Azure
Au coeur du framework .net 4.5.1
6 Session Aerow - New experience and SharePoint framework
aOS Toulouse - Session - New Experience & SharePoint Framework
Sw 100 fr docker conteneurisation des applications
Au cœur du Framework .NET 4.5.1
Cours 1 les principes de base
Publicité

Design applicatif avec symfony - Zoom sur la clean architecture - Symfony Live