> 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]]