SlideShare una empresa de Scribd logo
1 de 22
REFACTORING VERS
LES DESIGN
PATTERNS
Améliorer son
architecture
par les design
patterns
 Design est non-déterministe
 Ce n’est pas un processus répétable qui garanti un résultat
prédictible
 Les techniques de design sont guidé par des heuristiques
 Intuitive
 Plusieurs facteurs l’influence
 Le design est un processus itératif
 Processus à évolution lente
 Compromis et priorités
 Principe d’essais et erreurs
LES DÉFIS DU DESIGN
 Abstraction claire
 Designer de façon modulaire
 Favoriser une forte cohésion
 Séparation des préoccupations
 Designer en strate ou en oignons
 Limiter le nombre d’abstractions par niveau
 Distribution des responsabilités balancée
 S’inspirer des objets de la vie
 Limitation du couplage
 Garder le minimum d’interconnections
 Rendre les contrats explicites
 Encapsuler les détails d’implémentation
LES HEURISTIQUES FONDAMENTALES
 Choix de solutions simples
 Pas de partie en trop (utiliser le TDD)
 Éviter les défaillances
 Design pour la testabilité
 Identification des zones à haut risque de changement
 Extensibilité, Plugins, IOC, DI
 Utilisation de solutions éprouvées
 Design Patterns
LES HEURISTIQUES FONDAMENTALES
Contexte
DESIGN PATTERNS(PATRONS DE CONCEPTION)
Problèmes
connus
Bonnes
pratiques
Solutions
éprouvées
Creational
•Factory Method
•Abstract Factory
•Prototype
•Singleton
Structural
•Adapter
•Adapter
•Bridge
•Composite
•Decorator
•Facade
•Proxy
Behavioral
•Interpreter
•Template
Method
•Chain of
responsibility
•Command
•Iterator
•Mediator
•Memento
•Flyweight
•Observer
•State
•Strategy
•Visitor
LES DESIGN PATTERNS
Class
Object
DemoÉTAT INITIAL
PROBLÈME
Extensibilité
Dans ce patron une famille d'algorithmes sont encapsulés de
manière à être interchangeables. Les algorithmes peuvent
changer indépendamment de l'application qui s'en sert.
UTILISER UNE STRATÉGIE INTERCHANGER UN
ALGORITHME
Dans ce patron une famille d'algorithmes sont encapsulés de
manière à être interchangeables. Les algorithmes peuvent
changer indépendamment de l'application qui s'en sert.
UTILISER UNE STRATÉGIE INTERCHANGER UN
ALGORITHME
Demo
UTILISATION DU
STRATEGY PATTERN
PROBLÈME
Fonctionnalités
transversales
Ce patron permet d'attacher dynamiquement des
responsabilités à un objet. C’est une alternative à l'héritage
UTILISER LE DÉCORATEUR POUR ÉVITER L’EXPLOSION
DE HIÉRARCHIE
Ce patron permet d'attacher dynamiquement des
responsabilités à un objet. C’est une alternative à l'héritage
UTILISER LE DÉCORATEUR POUR ÉVITER L’EXPLOSION
DE HIÉRARCHIE
Demo
UTILISATION DU
DECORATOR
PATTERN
PROBLÈME
Construction
complexe d’objets
Ce patron fournit une interface pour créer des objets sans
spécifier la classe concrète. La méthode s’occupe de la
création de l’instance.
UTILISER UNE FACTORY POUR DÉLÉGUER LA CRÉATION
D’OBJETS
Ce patron fournit une interface pour créer des objets sans
spécifier la classe concrète. La méthode s’occupe de la
création de l’instance.
UTILISER UNE FACTORY METHOD POUR DÉLÉGUER LA
CRÉATION D’OBJETS
Demo
UTILISATION DU
FACTORY PATTERN
0
1
0 1 2 3 4 5 6
Locale
COMPLEXITÉComplexité
Niveaux d’abstraction
0
1
0 1 2 3 4 5 6
Locale
Globale
COMPLEXITÉComplexité
Niveaux d’abstraction
Zone de confort
 A retenir
 Le design est un art plus qu’une science
 Les patterns sont là pour nous aider
 Faire attention à la complexité
 Eric De Carufel
 eric@decarufel.net
 http://blog.decarufel.net
 http://pyxis-tech.com
 Sources : https://bitbucket.org/decarufe/refactortopatterns
 Questions?
23
CONCLUSION
Est à la recherche de dévelopeurs
Visitez la section carrière sur
pyxis-tech.com

Más contenido relacionado

Destacado

Big refactoring #12
Big refactoring #12Big refactoring #12
Big refactoring #12Jay Kim
 
[NEXT] Nextgram Refactoring
[NEXT] Nextgram Refactoring[NEXT] Nextgram Refactoring
[NEXT] Nextgram RefactoringYoungSu Son
 
TDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringTDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringSuwon Chae
 
Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]bbongcsu
 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorialBingu Shim
 
Industrialiser ses développements PHP - RMLL 2010
Industrialiser ses développements PHP - RMLL 2010Industrialiser ses développements PHP - RMLL 2010
Industrialiser ses développements PHP - RMLL 2010Jean-Marc Fontaine
 
La qualité au-delà du code - ConFoo 2012
La qualité au-delà du code - ConFoo 2012La qualité au-delà du code - ConFoo 2012
La qualité au-delà du code - ConFoo 2012Jean-Marc Fontaine
 
Caching and tuning fun for high scalability @ phpBenelux 2011
Caching and tuning fun for high scalability @ phpBenelux 2011Caching and tuning fun for high scalability @ phpBenelux 2011
Caching and tuning fun for high scalability @ phpBenelux 2011Wim Godden
 
Becoming a Polyglot Programmer Through the Eyes of a Freelance Musician
Becoming a Polyglot Programmer Through the Eyes of a Freelance MusicianBecoming a Polyglot Programmer Through the Eyes of a Freelance Musician
Becoming a Polyglot Programmer Through the Eyes of a Freelance Musiciankickinbahk
 
Top 5 des meilleures façons d'améliorer votre code
Top 5 des meilleures façons d'améliorer votre codeTop 5 des meilleures façons d'améliorer votre code
Top 5 des meilleures façons d'améliorer votre codeEric De Carufel
 
Running .NET on Docker
Running .NET on DockerRunning .NET on Docker
Running .NET on DockerBen Hall
 

Destacado (19)

Leaderpalooza Feb2010
Leaderpalooza Feb2010Leaderpalooza Feb2010
Leaderpalooza Feb2010
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoring
 
Refactoring#9
Refactoring#9Refactoring#9
Refactoring#9
 
Big refactoring #12
Big refactoring #12Big refactoring #12
Big refactoring #12
 
[NEXT] Nextgram Refactoring
[NEXT] Nextgram Refactoring[NEXT] Nextgram Refactoring
[NEXT] Nextgram Refactoring
 
TDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringTDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: Refactoring
 
Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]
 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorial
 
Influence With Peers
Influence With PeersInfluence With Peers
Influence With Peers
 
Af confef
Af confefAf confef
Af confef
 
Industrialiser ses développements PHP - RMLL 2010
Industrialiser ses développements PHP - RMLL 2010Industrialiser ses développements PHP - RMLL 2010
Industrialiser ses développements PHP - RMLL 2010
 
Python avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codagePython avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codage
 
La qualité au-delà du code - ConFoo 2012
La qualité au-delà du code - ConFoo 2012La qualité au-delà du code - ConFoo 2012
La qualité au-delà du code - ConFoo 2012
 
Caching and tuning fun for high scalability @ phpBenelux 2011
Caching and tuning fun for high scalability @ phpBenelux 2011Caching and tuning fun for high scalability @ phpBenelux 2011
Caching and tuning fun for high scalability @ phpBenelux 2011
 
Becoming a Polyglot Programmer Through the Eyes of a Freelance Musician
Becoming a Polyglot Programmer Through the Eyes of a Freelance MusicianBecoming a Polyglot Programmer Through the Eyes of a Freelance Musician
Becoming a Polyglot Programmer Through the Eyes of a Freelance Musician
 
Geothermal energy
Geothermal energyGeothermal energy
Geothermal energy
 
Top 5 des meilleures façons d'améliorer votre code
Top 5 des meilleures façons d'améliorer votre codeTop 5 des meilleures façons d'améliorer votre code
Top 5 des meilleures façons d'améliorer votre code
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
 
Running .NET on Docker
Running .NET on DockerRunning .NET on Docker
Running .NET on Docker
 

Similar a Refactoring vers les design patterns pyxis v2

Design applicatif avec symfony2
Design applicatif avec symfony2Design applicatif avec symfony2
Design applicatif avec symfony2RomainKuzniak
 
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel  - Introduction Et Bonnes PratiquesIndustrialisation Du Logiciel  - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel - Introduction Et Bonnes PratiquesEmmanuel Hugonnet
 
Industrialisation Du Logiciel Introduction Et Bonnes Pratiques V1.4
Industrialisation Du Logiciel   Introduction Et Bonnes Pratiques   V1.4Industrialisation Du Logiciel   Introduction Et Bonnes Pratiques   V1.4
Industrialisation Du Logiciel Introduction Et Bonnes Pratiques V1.4Emmanuel Hugonnet
 
Patrons de creation
Patrons de creationPatrons de creation
Patrons de creationomri med
 
Microsoft Azure : DevOps pour le Cloud... et réciproquement…
Microsoft Azure : DevOps pour le Cloud... et réciproquement…Microsoft Azure : DevOps pour le Cloud... et réciproquement…
Microsoft Azure : DevOps pour le Cloud... et réciproquement…Microsoft Technet France
 
Microsoft Azure dev Ops pour le Cloud... et réciproquement…
Microsoft Azure dev Ops pour le Cloud... et réciproquement…Microsoft Azure dev Ops pour le Cloud... et réciproquement…
Microsoft Azure dev Ops pour le Cloud... et réciproquement…Microsoft
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyENSET, Université Hassan II Casablanca
 
10-Cours de Géniel Logiciel
10-Cours de Géniel Logiciel10-Cours de Géniel Logiciel
10-Cours de Géniel Logiciellauraty3204
 
Keynote DevOps - Microsoft DevOps Day 2014 in Paris
Keynote DevOps - Microsoft DevOps Day 2014 in ParisKeynote DevOps - Microsoft DevOps Day 2014 in Paris
Keynote DevOps - Microsoft DevOps Day 2014 in ParisJason De Oliveira
 
Accélérer les tests d’acceptation avec un DSL et du refactoring
Accélérer les tests d’acceptation avec un DSL et du refactoringAccélérer les tests d’acceptation avec un DSL et du refactoring
Accélérer les tests d’acceptation avec un DSL et du refactoringLaurent PY
 
Design patterns - Exemples en Java
Design patterns - Exemples en JavaDesign patterns - Exemples en Java
Design patterns - Exemples en JavaOussama BEN KHIROUN
 
presentation Zest au JFTL 2014
presentation Zest au JFTL 2014presentation Zest au JFTL 2014
presentation Zest au JFTL 2014Laurent PY
 
Techdays2011
Techdays2011 Techdays2011
Techdays2011 ALTER WAY
 
Une architecture d'entreprise concrète et légère
Une architecture d'entreprise concrète et légèreUne architecture d'entreprise concrète et légère
Une architecture d'entreprise concrète et légèreDario Gomez Tafur
 
la session Patterns azure cloud au Gwab 2014
la session Patterns azure cloud au Gwab 2014la session Patterns azure cloud au Gwab 2014
la session Patterns azure cloud au Gwab 2014Aymeric Weinbach
 
Mockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilMockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilNormandy JUG
 
Industrialiser PHP - Open World Forum 2011
Industrialiser PHP - Open World Forum 2011Industrialiser PHP - Open World Forum 2011
Industrialiser PHP - Open World Forum 2011Jean-Marc Fontaine
 
DevOps et ALM : Application Lifecycle Management: Continuous Delivery avec Vi...
DevOps et ALM : Application Lifecycle Management: Continuous Delivery avec Vi...DevOps et ALM : Application Lifecycle Management: Continuous Delivery avec Vi...
DevOps et ALM : Application Lifecycle Management: Continuous Delivery avec Vi...Adrien Clerbois
 

Similar a Refactoring vers les design patterns pyxis v2 (20)

Design applicatif avec symfony2
Design applicatif avec symfony2Design applicatif avec symfony2
Design applicatif avec symfony2
 
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel  - Introduction Et Bonnes PratiquesIndustrialisation Du Logiciel  - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
 
Industrialisation Du Logiciel Introduction Et Bonnes Pratiques V1.4
Industrialisation Du Logiciel   Introduction Et Bonnes Pratiques   V1.4Industrialisation Du Logiciel   Introduction Et Bonnes Pratiques   V1.4
Industrialisation Du Logiciel Introduction Et Bonnes Pratiques V1.4
 
Patrons de creation
Patrons de creationPatrons de creation
Patrons de creation
 
Microsoft Azure : DevOps pour le Cloud... et réciproquement…
Microsoft Azure : DevOps pour le Cloud... et réciproquement…Microsoft Azure : DevOps pour le Cloud... et réciproquement…
Microsoft Azure : DevOps pour le Cloud... et réciproquement…
 
Microsoft Azure dev Ops pour le Cloud... et réciproquement…
Microsoft Azure dev Ops pour le Cloud... et réciproquement…Microsoft Azure dev Ops pour le Cloud... et réciproquement…
Microsoft Azure dev Ops pour le Cloud... et réciproquement…
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
 
10-Cours de Géniel Logiciel
10-Cours de Géniel Logiciel10-Cours de Géniel Logiciel
10-Cours de Géniel Logiciel
 
Keynote DevOps - Microsoft DevOps Day 2014 in Paris
Keynote DevOps - Microsoft DevOps Day 2014 in ParisKeynote DevOps - Microsoft DevOps Day 2014 in Paris
Keynote DevOps - Microsoft DevOps Day 2014 in Paris
 
Accélérer les tests d’acceptation avec un DSL et du refactoring
Accélérer les tests d’acceptation avec un DSL et du refactoringAccélérer les tests d’acceptation avec un DSL et du refactoring
Accélérer les tests d’acceptation avec un DSL et du refactoring
 
Design patterns - Exemples en Java
Design patterns - Exemples en JavaDesign patterns - Exemples en Java
Design patterns - Exemples en Java
 
presentation Zest au JFTL 2014
presentation Zest au JFTL 2014presentation Zest au JFTL 2014
presentation Zest au JFTL 2014
 
Techdays2011
Techdays2011 Techdays2011
Techdays2011
 
Une architecture d'entreprise concrète et légère
Une architecture d'entreprise concrète et légèreUne architecture d'entreprise concrète et légère
Une architecture d'entreprise concrète et légère
 
la session Patterns azure cloud au Gwab 2014
la session Patterns azure cloud au Gwab 2014la session Patterns azure cloud au Gwab 2014
la session Patterns azure cloud au Gwab 2014
 
Patterns azure cloud
Patterns azure cloudPatterns azure cloud
Patterns azure cloud
 
Mockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilMockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice Duteil
 
Lecon 1.1
Lecon 1.1Lecon 1.1
Lecon 1.1
 
Industrialiser PHP - Open World Forum 2011
Industrialiser PHP - Open World Forum 2011Industrialiser PHP - Open World Forum 2011
Industrialiser PHP - Open World Forum 2011
 
DevOps et ALM : Application Lifecycle Management: Continuous Delivery avec Vi...
DevOps et ALM : Application Lifecycle Management: Continuous Delivery avec Vi...DevOps et ALM : Application Lifecycle Management: Continuous Delivery avec Vi...
DevOps et ALM : Application Lifecycle Management: Continuous Delivery avec Vi...
 

Más de Eric De Carufel

Bracket Show Episode 35 - histoire de c# de 2002 à 2019
Bracket Show Episode 35 - histoire de c# de 2002 à 2019Bracket Show Episode 35 - histoire de c# de 2002 à 2019
Bracket Show Episode 35 - histoire de c# de 2002 à 2019Eric De Carufel
 
Architecture azure performante
Architecture azure performanteArchitecture azure performante
Architecture azure performanteEric De Carufel
 
Cqrs + event sourcing pyxis v2 - en
Cqrs + event sourcing   pyxis v2 - enCqrs + event sourcing   pyxis v2 - en
Cqrs + event sourcing pyxis v2 - enEric De Carufel
 
Dvcs mercurial - pyxis - eric de carufel
Dvcs   mercurial - pyxis - eric de carufelDvcs   mercurial - pyxis - eric de carufel
Dvcs mercurial - pyxis - eric de carufelEric De Carufel
 
Top 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton codeTop 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton codeEric De Carufel
 

Más de Eric De Carufel (7)

Bracket Show Episode 35 - histoire de c# de 2002 à 2019
Bracket Show Episode 35 - histoire de c# de 2002 à 2019Bracket Show Episode 35 - histoire de c# de 2002 à 2019
Bracket Show Episode 35 - histoire de c# de 2002 à 2019
 
Gadgteteer clean code
Gadgteteer   clean codeGadgteteer   clean code
Gadgteteer clean code
 
Architecture azure performante
Architecture azure performanteArchitecture azure performante
Architecture azure performante
 
Cqrs + event sourcing pyxis v2 - en
Cqrs + event sourcing   pyxis v2 - enCqrs + event sourcing   pyxis v2 - en
Cqrs + event sourcing pyxis v2 - en
 
CQRS + Event Sourcing
CQRS + Event SourcingCQRS + Event Sourcing
CQRS + Event Sourcing
 
Dvcs mercurial - pyxis - eric de carufel
Dvcs   mercurial - pyxis - eric de carufelDvcs   mercurial - pyxis - eric de carufel
Dvcs mercurial - pyxis - eric de carufel
 
Top 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton codeTop 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton code
 

Refactoring vers les design patterns pyxis v2

  • 1. REFACTORING VERS LES DESIGN PATTERNS Améliorer son architecture par les design patterns
  • 2.  Design est non-déterministe  Ce n’est pas un processus répétable qui garanti un résultat prédictible  Les techniques de design sont guidé par des heuristiques  Intuitive  Plusieurs facteurs l’influence  Le design est un processus itératif  Processus à évolution lente  Compromis et priorités  Principe d’essais et erreurs LES DÉFIS DU DESIGN
  • 3.  Abstraction claire  Designer de façon modulaire  Favoriser une forte cohésion  Séparation des préoccupations  Designer en strate ou en oignons  Limiter le nombre d’abstractions par niveau  Distribution des responsabilités balancée  S’inspirer des objets de la vie  Limitation du couplage  Garder le minimum d’interconnections  Rendre les contrats explicites  Encapsuler les détails d’implémentation LES HEURISTIQUES FONDAMENTALES
  • 4.  Choix de solutions simples  Pas de partie en trop (utiliser le TDD)  Éviter les défaillances  Design pour la testabilité  Identification des zones à haut risque de changement  Extensibilité, Plugins, IOC, DI  Utilisation de solutions éprouvées  Design Patterns LES HEURISTIQUES FONDAMENTALES
  • 5. Contexte DESIGN PATTERNS(PATRONS DE CONCEPTION) Problèmes connus Bonnes pratiques Solutions éprouvées
  • 6. Creational •Factory Method •Abstract Factory •Prototype •Singleton Structural •Adapter •Adapter •Bridge •Composite •Decorator •Facade •Proxy Behavioral •Interpreter •Template Method •Chain of responsibility •Command •Iterator •Mediator •Memento •Flyweight •Observer •State •Strategy •Visitor LES DESIGN PATTERNS Class Object
  • 9. Dans ce patron une famille d'algorithmes sont encapsulés de manière à être interchangeables. Les algorithmes peuvent changer indépendamment de l'application qui s'en sert. UTILISER UNE STRATÉGIE INTERCHANGER UN ALGORITHME
  • 10. Dans ce patron une famille d'algorithmes sont encapsulés de manière à être interchangeables. Les algorithmes peuvent changer indépendamment de l'application qui s'en sert. UTILISER UNE STRATÉGIE INTERCHANGER UN ALGORITHME
  • 13. Ce patron permet d'attacher dynamiquement des responsabilités à un objet. C’est une alternative à l'héritage UTILISER LE DÉCORATEUR POUR ÉVITER L’EXPLOSION DE HIÉRARCHIE
  • 14. Ce patron permet d'attacher dynamiquement des responsabilités à un objet. C’est une alternative à l'héritage UTILISER LE DÉCORATEUR POUR ÉVITER L’EXPLOSION DE HIÉRARCHIE
  • 17. Ce patron fournit une interface pour créer des objets sans spécifier la classe concrète. La méthode s’occupe de la création de l’instance. UTILISER UNE FACTORY POUR DÉLÉGUER LA CRÉATION D’OBJETS
  • 18. Ce patron fournit une interface pour créer des objets sans spécifier la classe concrète. La méthode s’occupe de la création de l’instance. UTILISER UNE FACTORY METHOD POUR DÉLÉGUER LA CRÉATION D’OBJETS
  • 20. 0 1 0 1 2 3 4 5 6 Locale COMPLEXITÉComplexité Niveaux d’abstraction
  • 21. 0 1 0 1 2 3 4 5 6 Locale Globale COMPLEXITÉComplexité Niveaux d’abstraction Zone de confort
  • 22.  A retenir  Le design est un art plus qu’une science  Les patterns sont là pour nous aider  Faire attention à la complexité  Eric De Carufel  eric@decarufel.net  http://blog.decarufel.net  http://pyxis-tech.com  Sources : https://bitbucket.org/decarufe/refactortopatterns  Questions? 23 CONCLUSION Est à la recherche de dévelopeurs Visitez la section carrière sur pyxis-tech.com