> Les patrons de conception sont des **solutions classiques** à des **problèmes récurrents** de la **conception de logiciels**. Ce sont des sortes de plans ou de schémas que l’on peut **personnaliser** afin de résoudre un problème récurrent dans notre code.
https://refactoring.guru/fr/design-patterns/what-is-pattern
Les patrons de conception
- sont une boîte à outils de **solutions fiables et éprouvées**
- définissent un **langage commun** qui peut être utilisés pour communiquer avec nos pairs et permettent de réduire la [[Glossaire#Charge cognitive (théorie en psychologie cognitive)|charge cognitive]] en identifiant des concepts parfois complexes en peu de mots.
> [!danger] Attention à la patternite !
> Il peut être tentant de résoudre tous les problèmes à l'aide de patrons de conception.
> Mais rappelons-nous qu'ils s'appuient parfois sur des [[Glossaire#Abstraction (en programmation orientée-objet)|abstractions]] qui peuvent parfois ajouter des **indirections** et augmenter la **compléxité programmatique** ou encore **l'empreinte mémoire** d'un code
## Patterns et frameworks
Lorsque vous utilisez certains Framework de programmation comme JavaFx ou Spring ou autre, vous utilisez certainement sans le savoir beaucoup de design patterns.
## Antipatterns
Les "anti-patterns" sont des solutions généralement admises comme nuisibles **dans leur contexte** et dans leur **époque**.
Cela peut être
- **des solutions naïves** qui semblent évidentes au premier abord mais qui cachent des écueils quand on creuse un peu plus loin.
- des **design patterns qui étaient utiles hier**, et aujourd’hui sont problématiques.
Certains d’entre eux sont même devenus idiomatiques et très répondu et font partie des standards du langage.
https://web.archive.org/web/20220409155838/https://sourcemaking.com/antipatterns/software-development-antipatterns
https://web.archive.org/web/20220409155842/https://sourcemaking.com/antipatterns/software-architecture-antipatterns
https://web.archive.org/web/20220528035708/https://sourcemaking.com/antipatterns/software-project-management-antipatterns
## Refactoring
Les **refactoring** où **ré-usinage** sont des gestes de programmation consistant à modifier la structure d’un code **sans en modifier le comportement visible**.
Un certain nombre d’entre eux sont disponibles de façon automatique dans nos outils.
Exemples :
- extraire une méthode
- extraire une variable
- renommer une méthode
- renommer une variable
- renommer une classe
- déplacer une méthode d’une classe à l’autre
![[intellij-automated-refactorings.mp4]]
À l’intérieur d’un projet ces factorings sont considérés comme des refactoring peu risqués.
Ce sont des **petits gestes** qui, combinés, peuvent permettre de modifier la conception d’un logiciel pour le rendre plus maintenable et/ou réutilisable.
## À suivre
[[7.1 - Introduction à JavaFx]]