SOLID est un ensemble de cinq principes de conception pour construire des systèmes OOP maintenables et flexibles. Chacun d'eux traite une cause commune de code rigide et fragile.
SOLID est un ensemble de cinq principes de conception pour construire des systèmes OOP maintenables et flexibles. Chacun d'eux traite une cause commune de code rigide et fragile.
| Lettre | Principe | Signification en une ligne |
|---|
| S | Responsabilité Unique | Une classe devrait avoir une seule raison de changer |
| O | Ouvert/Fermé | Ouvert à l'extension, fermé à la modification |
| L | Substitution de Liskov | Les sous-types doivent être utilisables partout où le type de base l'est |
| I | Ségrégation d'Interface | Plusieurs petites interfaces valent mieux qu'une grosse |
| D | Inversion de Dépendance | Dépendre des abstractions, non des classes concrètes |
# Dependency Inversion: high-level code depends on an abstraction
class Notifier: # abstraction
def send(self, msg): ...
class EmailNotifier(Notifier):
def send(self, msg): print("email:", msg)
class OrderService:
def __init__(self, notifier: Notifier): # injected abstraction
self.notifier = notifier # not "new EmailNotifier()"
def place(self):
self.notifier.send("order placed") # works with ANY Notifier
OrderService ne dépend pas de l'email spécifiquement — remplacez-le par SMS ou un double de test sans le modifier (D). Ajouter un nouveau type de notificateur ne nécessite aucun changement dans OrderService (O).
SOLID est une orientation, pas une loi. Sur-l'appliquer — une interface par classe, de l'indirection partout — produit une « soupe d'abstraction » plus difficile à suivre que le problème qu'elle résolvait.
SOLID fournit un langage diagnostic partagé : les relecteurs peuvent nommer pourquoi une classe est difficile à changer (« cela viole SRP ») au lieu de discuter par goût.
Appliqués avec jugement, les principes réduisent les effets de propagation — les changements restent locaux, les nouvelles fonctionnalités étendent plutôt que réécrivent, et les tests peuvent substituer des fakes aux vraies dépendances.