Paradigmes & patterns · L2 · Section 4/4
Ressources
Progression
Points d’expérience : —XPSérie de jours consécutifs : —· —Progression du module : — / —compris
#Ressources — Paradigmes & patterns
Pourquoi ces références : comparer objectivement les styles, reconnaître les patterns au bon moment et démanteler les anti-patterns avant qu'ils ne coûtent cher. Comment s'en servir : lire un chapitre, identifier le problème dans votre propre code, appliquer, puis mesurer (complexité, testabilité, temps de débogage).
#Guides
- Gamma, Helm, Johnson, Vlissides, Design Patterns (le GoF) : la catalogue historique ; à lire avec un œil moderne (composition plutôt qu'héritage).
- Martin, Clean Code et Agile Software Development : principes SOLID, démarcation calcul/effets, injection de dépendances.
- Fowler, Refactoring : recettes de transformation de code (extraire une fonction, introduire un paramètre) qui servent aussi pour changer de style.
- Résumés vivants : refactoring.guru pour les patterns illustrés et leurs contre-indications.
#Principes et heuristiques
- SOLID (SRP, OCP, LSP, ISP, DIP) : cinq garde-fous de conception orientée objet.
- Law of Demeter : ne parler qu'à ses collaborateurs directs.
- YAGNI et KISS : ne pas construire la flexibilité qu'aucun besoin actuel ne justifie.
#Anti-patterns
- Singleton abusif : état global déguisé ; les tests deviennent ordre-dépendants. Remède : injecter la dépendance.
- God object : une classe qui centralise tout ; remède : extraire des collaborateurs par responsabilité.
- Sur-abstraction : interfaces à une seule implémentation « au cas où » ; remède : supprimer jusqu'à ce qu'une deuxième implémentation réelle apparaisse.
- Anaemic domain model : objets réducteurs à des sacs de données, toute la logique ailleurs ; remède : rapprocher données et invariants.
#Exercices conseillés
- Refaire les trois styles du même calcul (total panier, normalisation de textes) et comparer les tests : lesquels s'écrivent sans préparation d'état ?
- Écrire un décorateur de retry sans toucher à la fonction décorée, puis en retirer le logging sans dupliquer quoi que ce soit.
- Prendre un singleton de votre projet, l'injecter par paramètre, et mesurer combien de tests deviennent parallélisables.
#Outils
- Linters et analyse statique (ruff, pylint, mypy) pour détecter les odeurs de code et les effets non voulus.
- Tests : pytest avec fixtures pour matérialiser les frontières calcul/effets ; hypothesis pour tester la pureté (même entrée, même sortie, sur des entrées générées).
- Profiling (cProfile, py-spy) avant tout choix « performance » entre styles : mesurer, pas deviner.