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

PFE : ITIL - Gestion de parc informatique
PFE : ITIL - Gestion de parc informatiquePFE : ITIL - Gestion de parc informatique
PFE : ITIL - Gestion de parc informatique
chammem
 

Tendances (20)

Python for-unix-and-linux-system-administration
Python for-unix-and-linux-system-administrationPython for-unix-and-linux-system-administration
Python for-unix-and-linux-system-administration
 
Python SOLID
Python SOLIDPython SOLID
Python SOLID
 
Real Life Clean Architecture
Real Life Clean ArchitectureReal Life Clean Architecture
Real Life Clean Architecture
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações web
 
Use Symfony Messenger Component and CQRS!
Use Symfony Messenger Component and CQRS!Use Symfony Messenger Component and CQRS!
Use Symfony Messenger Component and CQRS!
 
SOLID Principles
SOLID PrinciplesSOLID Principles
SOLID Principles
 
SOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsSOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applications
 
Alphorm.com Formation CCNP ENCOR 350-401 (6of8) : Sécurité
Alphorm.com Formation CCNP ENCOR 350-401 (6of8) : SécuritéAlphorm.com Formation CCNP ENCOR 350-401 (6of8) : Sécurité
Alphorm.com Formation CCNP ENCOR 350-401 (6of8) : Sécurité
 
Vertical vs Horizontal Software Architecture
Vertical vs Horizontal Software ArchitectureVertical vs Horizontal Software Architecture
Vertical vs Horizontal Software Architecture
 
Micro Frontends: Rompiendo el monolito en las aplicaciones Web
Micro Frontends: Rompiendo el monolito en las aplicaciones WebMicro Frontends: Rompiendo el monolito en las aplicaciones Web
Micro Frontends: Rompiendo el monolito en las aplicaciones Web
 
Solid Principles
Solid PrinciplesSolid Principles
Solid Principles
 
Domain Driven Design com Python
Domain Driven Design com PythonDomain Driven Design com Python
Domain Driven Design com Python
 
OutSystems Front End Specialization - Study Help Deck
OutSystems Front End Specialization - Study Help DeckOutSystems Front End Specialization - Study Help Deck
OutSystems Front End Specialization - Study Help Deck
 
PFE : ITIL - Gestion de parc informatique
PFE : ITIL - Gestion de parc informatiquePFE : ITIL - Gestion de parc informatique
PFE : ITIL - Gestion de parc informatique
 
[Infographie] Architecte cybersécurité
[Infographie] Architecte cybersécurité[Infographie] Architecte cybersécurité
[Infographie] Architecte cybersécurité
 
Change and Release Management with JIRA and Bamboo - Atlassian Summit 2010
Change and Release Management with JIRA and Bamboo - Atlassian Summit 2010Change and Release Management with JIRA and Bamboo - Atlassian Summit 2010
Change and Release Management with JIRA and Bamboo - Atlassian Summit 2010
 
Patterns of resilience
Patterns of resiliencePatterns of resilience
Patterns of resilience
 
Business Value of CI, CD, & DevOps(Sec)
Business Value of CI, CD, & DevOps(Sec)Business Value of CI, CD, & DevOps(Sec)
Business Value of CI, CD, & DevOps(Sec)
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 

En vedette

React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
Yukiya Nakagawa
 
Subsides bruxelles-entreprendre ondernemen-2014
Subsides bruxelles-entreprendre ondernemen-2014Subsides bruxelles-entreprendre ondernemen-2014
Subsides bruxelles-entreprendre ondernemen-2014
impulse.brussels
 

En vedette (20)

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
 
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
 
DDD in PHP
DDD in PHPDDD in PHP
DDD in PHP
 
Design pattern in Symfony2 - Nanos gigantium humeris insidentes
Design pattern in Symfony2 - Nanos gigantium humeris insidentesDesign pattern in Symfony2 - Nanos gigantium humeris insidentes
Design pattern in Symfony2 - Nanos gigantium humeris insidentes
 

Similaire à Le pattern View Model avec Symfony2

Softfluent speig mdday2010
Softfluent speig mdday2010Softfluent speig mdday2010
Softfluent speig mdday2010
MD DAY
 
Architecture mvc
Architecture mvcArchitecture mvc
Architecture mvc
Madridal
 
Le Developpement Web Aspnet2 Vb2005
Le Developpement Web Aspnet2   Vb2005Le Developpement Web Aspnet2   Vb2005
Le Developpement Web Aspnet2 Vb2005
Gregory Renard
 

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