SlideShare une entreprise Scribd logo
1  sur  49
Télécharger pour lire hors ligne
LE PATTERN VIEW MODEL AVEC
SYMFONY2
QUI SUIS-JE ?
Romain Kuzniak
@TurnItUpMethod
Responsable Technique chez OpenClassrooms
1 M de membres, 2,7 M de VU / 25-30 M de pages vues
Design applicatif, musique et Symfony2
Designs applicatifs avec Symfony2
DE QUOI EST-IL QUESTION ?
ViewControllerDomain
ViewControllerModel
MVC
Presentation
Layered
ViewController
Business
Layer
Data
Layer
Presentation
Infrastructure
Domain Driven Design
Domain
Layer
Application
Layer
ViewController
Presentation
ViewController
Entity
Clean Architecture
Use Case
Gateway
Implementations
Boundary
Presentation
Vue Controller
Data
WTF Design
Kitten
Layer
Unicorns
Park
CONTROLLER
VIEW
SIMPLE, MAIS …
Le post suivant
La liste des derniers posts vus
La liste des posts les + vus
Une recommandation de posts
…
QUELS SONT LES PROBLÈMES ?
APTITUDE AU CHANGEMENT
La présentation dépend du domaine
Un changement entraîne des changements dans
toutes les couches
Too much knowledge
LOGIQUE DANS LA VUE
Pour gérer des cas métiers
Pour gérer des variables non-définies
Pour gérer des valeurs par défaut
LOGIQUE DANS LA VUE
Pour gérer des cas métiers
Pour gérer des variables définies
Pour gérer des valeurs par défaut
COMPLEXITÉ DANS LE CONTROLLER
Un espace trop important est occupé pour le
passage des paramètres à la vue
COMPLEXITÉ DANS LE CONTROLLER
Un espace trop important est occupé pour le
passage des paramètres à la vue
UTILISATION DES COMPOSANTS
La visibilité des variables n’est pas claire (entre
le template et celui dans lequel il est inclus)
Les composants ne sont pas facilement
réutilisables
TESTABILITÉ
Les tests nécessitent les couches du domaine
LE PATTERN VIEW MODEL
Plusieurs variations : Model View ViewModel,
Model View Presenter, Presentation Model,
MVC …
Objectif : Créer une abstraction entre les
objets du domaine et la présentation
View
Model
Objet du
domaine
Objet du
domaine
Assembler
LE MODEL
Représentation de la vue
Objet sans logique (DTO)
LE MODEL
L’ASSEMBLER
Data mapper
L’ASSEMBLER
LE CONTROLLER
LA VUE
AVANTAGES
APTITUDE AU CHANGEMENT
Le domaine et la vue peuvent évoluer en toute
indépendance
La vue ne possède que les données utiles
LOGIQUE DANS LA VUE
La logique peut être déportée dans le View
Model, l’assembler ou un service dédié
COMPLEXITÉ DANS LE CONTROLLER
La création des données pour la vue est
déportée dans l’assembler
UTILISATION DES COMPOSANTS
A un composant correspond un View Model
La logique de construction est factorisée
Un seul paramètre à passer au template
TESTABILITÉ
La création de stub est simple
Le front et le back ont la possibilité de travailler
en parallèle
INCONVÉNIENTS
Plus de classes
-totokiller38
«Avec les frameworks MVC javascript, utiliser des
vues dans une application c’est so 2009.»
-BoomBoomStriker
« Cette présentation est nulle, moi j’utilise des APIs. »
API
Une api est une représentation de ressources
ViewControllerDomain
ResourceControllerDomain
API MODEL
API CONTROLLER
Ou utilisez votre serializer favori
EN BREF
EN BREF
Créer une abstraction représentant la vue ou la ressource
Domaine et présentation varient indépendamment
La vue ne possède aucune logique
Les composants sont facilement identifiables
Testable
S’adapte totalement avec Twig
S’adapte totalement avec une api
BIBLIOGRAPHIE
Martin Fowler - Patterns of Enterprise
Application Architecture - Éditions Addison-
Wesley - 2004
Derek Greer - Interactive Application
Architecture Patterns
MSDN
MERCI

Contenu connexe

Tendances

DDD - 1 - A gentle introduction to Domain Driven Design.pdf
DDD - 1 - A gentle introduction to Domain Driven Design.pdfDDD - 1 - A gentle introduction to Domain Driven Design.pdf
DDD - 1 - A gentle introduction to Domain Driven Design.pdfEleonora Ciceri
 
Introducing Clean Architecture
Introducing Clean ArchitectureIntroducing Clean Architecture
Introducing Clean ArchitectureRoc Boronat
 
Building RESTful applications using Spring MVC
Building RESTful applications using Spring MVCBuilding RESTful applications using Spring MVC
Building RESTful applications using Spring MVCIndicThreads
 
Adapter Design Pattern
Adapter Design PatternAdapter Design Pattern
Adapter Design PatternAdeel Riaz
 
SOLID Design Principles
SOLID Design PrinciplesSOLID Design Principles
SOLID Design PrinciplesSamuel Breed
 
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFШаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFSergey Nemchinsky
 
Шаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UMLШаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UMLSergey Nemchinsky
 
Design applicatif avec symfony - Zoom sur la clean architecture - Symfony Live
Design applicatif avec symfony - Zoom sur la clean architecture - Symfony LiveDesign applicatif avec symfony - Zoom sur la clean architecture - Symfony Live
Design applicatif avec symfony - Zoom sur la clean architecture - Symfony LiveRomainKuzniak
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Ippon
 
Java Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By StepJava Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By StepGuo Albert
 

Tendances (20)

Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
DDD - 1 - A gentle introduction to Domain Driven Design.pdf
DDD - 1 - A gentle introduction to Domain Driven Design.pdfDDD - 1 - A gentle introduction to Domain Driven Design.pdf
DDD - 1 - A gentle introduction to Domain Driven Design.pdf
 
SOLID Principles
SOLID PrinciplesSOLID Principles
SOLID Principles
 
Cours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxyCours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxy
 
Introducing Clean Architecture
Introducing Clean ArchitectureIntroducing Clean Architecture
Introducing Clean Architecture
 
Building RESTful applications using Spring MVC
Building RESTful applications using Spring MVCBuilding RESTful applications using Spring MVC
Building RESTful applications using Spring MVC
 
Jsp
JspJsp
Jsp
 
Adapter Design Pattern
Adapter Design PatternAdapter Design Pattern
Adapter Design Pattern
 
Spring Data JPA
Spring Data JPASpring Data JPA
Spring Data JPA
 
SOLID Design Principles
SOLID Design PrinciplesSOLID Design Principles
SOLID Design Principles
 
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFШаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
 
Шаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UMLШаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UML
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Design applicatif avec symfony - Zoom sur la clean architecture - Symfony Live
Design applicatif avec symfony - Zoom sur la clean architecture - Symfony LiveDesign applicatif avec symfony - Zoom sur la clean architecture - Symfony Live
Design applicatif avec symfony - Zoom sur la clean architecture - Symfony Live
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Spring boot
Spring bootSpring boot
Spring boot
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
 
Java Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By StepJava Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By Step
 

En vedette

Design applicatif avec symfony2
Design applicatif avec symfony2Design applicatif avec symfony2
Design applicatif avec symfony2RomainKuzniak
 
Méthodologie de gestion des tâches dans les projets web
Méthodologie de gestion des tâches dans les projets webMéthodologie de gestion des tâches dans les projets web
Méthodologie de gestion des tâches dans les projets webRomainKuzniak
 
Une migration sur AWS, une migration orientée produit
Une migration sur AWS, une migration orientée produitUne migration sur AWS, une migration orientée produit
Une migration sur AWS, une migration orientée produitRomainKuzniak
 
Clean architecture with ddd layering in php
Clean architecture with ddd layering in phpClean architecture with ddd layering in php
Clean architecture with ddd layering in phpLeonardo Proietti
 
Qu'est ce qu'une bonne application
Qu'est ce qu'une bonne applicationQu'est ce qu'une bonne application
Qu'est ce qu'une bonne applicationRomainKuzniak
 
Anatomy of a Modern PHP Application Architecture
Anatomy of a Modern PHP Application Architecture Anatomy of a Modern PHP Application Architecture
Anatomy of a Modern PHP Application Architecture AppDynamics
 
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiYukiya Nakagawa
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3Eddy RICHARD
 
Edition of an Enterprise Software, Feedback
Edition of an Enterprise Software, FeedbackEdition of an Enterprise Software, Feedback
Edition of an Enterprise Software, FeedbackNicolas Dupont
 
Subsides bruxelles-entreprendre ondernemen-2014
Subsides bruxelles-entreprendre ondernemen-2014Subsides bruxelles-entreprendre ondernemen-2014
Subsides bruxelles-entreprendre ondernemen-2014impulse.brussels
 
10 Missions pour apprendre à créer et programmer son robot
10 Missions pour apprendre à créer et programmer son robot10 Missions pour apprendre à créer et programmer son robot
10 Missions pour apprendre à créer et programmer son robotForum Education Science Culture
 
Angularjs101-les_SPA:support de la video
Angularjs101-les_SPA:support de la videoAngularjs101-les_SPA:support de la video
Angularjs101-les_SPA:support de la videoeric German
 
Symfony live Paris 2014 - Symfony2 sur Azure
Symfony live Paris 2014 - Symfony2 sur AzureSymfony live Paris 2014 - Symfony2 sur Azure
Symfony live Paris 2014 - Symfony2 sur AzureStéphane ESCANDELL
 
Software Architecture for Innovation
Software Architecture for InnovationSoftware Architecture for Innovation
Software Architecture for InnovationEberhard Wolff
 
Symfony et Sonata Project chez Canal+
Symfony et Sonata Project chez Canal+ Symfony et Sonata Project chez Canal+
Symfony et Sonata Project chez Canal+ ekino
 
Cleancode / Tocea / Introduction
Cleancode / Tocea / IntroductionCleancode / Tocea / Introduction
Cleancode / Tocea / IntroductionSylvain Leroy
 
Il était une fois le Continuous Delivery chez Meetic
Il était une fois le Continuous Delivery chez MeeticIl était une fois le Continuous Delivery chez Meetic
Il était une fois le Continuous Delivery chez MeeticJoris Calabrese
 

En vedette (20)

Design applicatif avec symfony2
Design applicatif avec symfony2Design applicatif avec symfony2
Design applicatif avec symfony2
 
Méthodologie de gestion des tâches dans les projets web
Méthodologie de gestion des tâches dans les projets webMéthodologie de gestion des tâches dans les projets web
Méthodologie de gestion des tâches dans les projets web
 
Une migration sur AWS, une migration orientée produit
Une migration sur AWS, une migration orientée produitUne migration sur AWS, une migration orientée produit
Une migration sur AWS, une migration orientée produit
 
Clean architecture with ddd layering in php
Clean architecture with ddd layering in phpClean architecture with ddd layering in php
Clean architecture with ddd layering in php
 
Qu'est ce qu'une bonne application
Qu'est ce qu'une bonne applicationQu'est ce qu'une bonne application
Qu'est ce qu'une bonne application
 
Anatomy of a Modern PHP Application Architecture
Anatomy of a Modern PHP Application Architecture Anatomy of a Modern PHP Application Architecture
Anatomy of a Modern PHP Application Architecture
 
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3
 
Edition of an Enterprise Software, Feedback
Edition of an Enterprise Software, FeedbackEdition of an Enterprise Software, Feedback
Edition of an Enterprise Software, Feedback
 
Clean architecture - PHP
Clean architecture - PHPClean architecture - PHP
Clean architecture - PHP
 
Subsides bruxelles-entreprendre ondernemen-2014
Subsides bruxelles-entreprendre ondernemen-2014Subsides bruxelles-entreprendre ondernemen-2014
Subsides bruxelles-entreprendre ondernemen-2014
 
10 Missions pour apprendre à créer et programmer son robot
10 Missions pour apprendre à créer et programmer son robot10 Missions pour apprendre à créer et programmer son robot
10 Missions pour apprendre à créer et programmer son robot
 
Angularjs101-les_SPA:support de la video
Angularjs101-les_SPA:support de la videoAngularjs101-les_SPA:support de la video
Angularjs101-les_SPA:support de la video
 
Symfony live Paris 2014 - Symfony2 sur Azure
Symfony live Paris 2014 - Symfony2 sur AzureSymfony live Paris 2014 - Symfony2 sur Azure
Symfony live Paris 2014 - Symfony2 sur Azure
 
Clean code
Clean codeClean code
Clean code
 
Software Architecture for Innovation
Software Architecture for InnovationSoftware Architecture for Innovation
Software Architecture for Innovation
 
Symfony et Sonata Project chez Canal+
Symfony et Sonata Project chez Canal+ Symfony et Sonata Project chez Canal+
Symfony et Sonata Project chez Canal+
 
Cleancode / Tocea / Introduction
Cleancode / Tocea / IntroductionCleancode / Tocea / Introduction
Cleancode / Tocea / Introduction
 
Clean architectures
Clean architecturesClean architectures
Clean architectures
 
Il était une fois le Continuous Delivery chez Meetic
Il était une fois le Continuous Delivery chez MeeticIl était une fois le Continuous Delivery chez Meetic
Il était une fois le Continuous Delivery chez Meetic
 

Similaire à Le pattern View Model avec Symfony2

MVVM de A à Z
MVVM de A à ZMVVM de A à Z
MVVM de A à ZMicrosoft
 
les style d'architecture
les style d'architecture les style d'architecture
les style d'architecture Mouna Maazoun
 
Softfluent speig mdday2010
Softfluent speig mdday2010Softfluent speig mdday2010
Softfluent speig mdday2010MD DAY
 
Tech days 2012 mvvm de a à z
Tech days 2012   mvvm de a à zTech days 2012   mvvm de a à z
Tech days 2012 mvvm de a à zArnaud Auroux
 
3D_Evolution - Logiciel de conversions de données CAO 3D
3D_Evolution - Logiciel de conversions de données CAO 3D3D_Evolution - Logiciel de conversions de données CAO 3D
3D_Evolution - Logiciel de conversions de données CAO 3DCORETECHNOLOGIE
 
Architecture, bonnes pratiques et recettes pour la réussite de vos projets av...
Architecture, bonnes pratiques et recettes pour la réussite de vos projets av...Architecture, bonnes pratiques et recettes pour la réussite de vos projets av...
Architecture, bonnes pratiques et recettes pour la réussite de vos projets av...Microsoft Technet France
 
Architecture mvc
Architecture mvcArchitecture mvc
Architecture mvcMadridal
 
Créer et intégrer son thème PrestaShop
Créer et intégrer son thème PrestaShopCréer et intégrer son thème PrestaShop
Créer et intégrer son thème PrestaShopPrestaShop
 
ASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSRenaud Dumont
 
LTA : Découverte de .NET Core
LTA : Découverte de .NET CoreLTA : Découverte de .NET Core
LTA : Découverte de .NET CoreMaxime Baumann
 
Le Developpement Web Aspnet2 Vb2005
Le Developpement Web Aspnet2   Vb2005Le Developpement Web Aspnet2   Vb2005
Le Developpement Web Aspnet2 Vb2005Gregory Renard
 
MAD Model Aggregator eDitor (EMF)
MAD Model Aggregator eDitor (EMF)MAD Model Aggregator eDitor (EMF)
MAD Model Aggregator eDitor (EMF)Sysord
 
DrupalCamp2013 - "libérez drupal"
DrupalCamp2013 - "libérez drupal"DrupalCamp2013 - "libérez drupal"
DrupalCamp2013 - "libérez drupal"Laurent Chardin
 

Similaire à Le pattern View Model avec Symfony2 (20)

MVVM de A à Z
MVVM de A à ZMVVM de A à Z
MVVM de A à Z
 
les style d'architecture
les style d'architecture les style d'architecture
les style d'architecture
 
Softfluent speig mdday2010
Softfluent speig mdday2010Softfluent speig mdday2010
Softfluent speig mdday2010
 
Tech days 2012 mvvm de a à z
Tech days 2012   mvvm de a à zTech days 2012   mvvm de a à z
Tech days 2012 mvvm de a à z
 
3D_Evolution - Logiciel de conversions de données CAO 3D
3D_Evolution - Logiciel de conversions de données CAO 3D3D_Evolution - Logiciel de conversions de données CAO 3D
3D_Evolution - Logiciel de conversions de données CAO 3D
 
Introducthion mvvm avec wpf
Introducthion mvvm avec wpfIntroducthion mvvm avec wpf
Introducthion mvvm avec wpf
 
Architecture, bonnes pratiques et recettes pour la réussite de vos projets av...
Architecture, bonnes pratiques et recettes pour la réussite de vos projets av...Architecture, bonnes pratiques et recettes pour la réussite de vos projets av...
Architecture, bonnes pratiques et recettes pour la réussite de vos projets av...
 
Architecture mvc
Architecture mvcArchitecture mvc
Architecture mvc
 
Approche Mda
Approche MdaApproche Mda
Approche Mda
 
Modele mvc
Modele mvcModele mvc
Modele mvc
 
Créer et intégrer son thème PrestaShop
Créer et intégrer son thème PrestaShopCréer et intégrer son thème PrestaShop
Créer et intégrer son thème PrestaShop
 
ASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJS
 
2 ModéLe Mvc
2 ModéLe Mvc2 ModéLe Mvc
2 ModéLe Mvc
 
LTA : Découverte de .NET Core
LTA : Découverte de .NET CoreLTA : Découverte de .NET Core
LTA : Découverte de .NET Core
 
Prezentare ASP.Net.pptx
Prezentare ASP.Net.pptxPrezentare ASP.Net.pptx
Prezentare ASP.Net.pptx
 
AngularJS
AngularJSAngularJS
AngularJS
 
Meet up sqli lyon 09-2015 - Angular
Meet up sqli lyon 09-2015 - AngularMeet up sqli lyon 09-2015 - Angular
Meet up sqli lyon 09-2015 - Angular
 
Le Developpement Web Aspnet2 Vb2005
Le Developpement Web Aspnet2   Vb2005Le Developpement Web Aspnet2   Vb2005
Le Developpement Web Aspnet2 Vb2005
 
MAD Model Aggregator eDitor (EMF)
MAD Model Aggregator eDitor (EMF)MAD Model Aggregator eDitor (EMF)
MAD Model Aggregator eDitor (EMF)
 
DrupalCamp2013 - "libérez drupal"
DrupalCamp2013 - "libérez drupal"DrupalCamp2013 - "libérez drupal"
DrupalCamp2013 - "libérez drupal"
 

Le pattern View Model avec Symfony2