SOLID je pet načel za oblikovanje za gradnjo vzdržnih, prožnih OOP sistemov. Vsako naslanja pogosto vzrok rigidne, krhke kode.
SOLID je pet načel za oblikovanje za gradnjo vzdržnih, prožnih OOP sistemov. Vsako naslanja pogosto vzrok rigidne, krhke kode.
| Črka | Načelo | Pomen v eni vrstici |
|---|
| S | Single Responsibility | Razred bi moral imeti en razlog za spremembo |
| O | Open/Closed | Odprto za razširitev, zaprto za spremembo |
| L | Liskov Substitution | Podtipe morajo biti uporabljivi, kjer je osnovni tip |
| I | Interface Segregation | Številni majhni vmesniki so boljši od enega debelega |
| D | Dependency Inversion | Odvisni od abstrakcij, ne od konkretnih razredov |
# 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 ni odvisen od e-pošte specifično — zamenjajte SMS ali test double brez spreminjanja (D). Dodajanje novega tipa obveščevalca ne zahteva spremembe OrderService (O).
SOLID je smernica, ne zakon. Prekomerno uporablnjanje — vmesnik na razred, indirekcija povsod — proizvede "abstrakcijsko juho", ki je težja za sledenje kot problem, ki ga je rešila.
SOLID daje skupni diagnostični jezik: pregledovalci lahko poimenujejo zakaj je razred težko spremeniti ("to krši SRP") namesto prepiranja okusa.
Z razsudkom uporabljeni principi zmanjšajo valovne učinke — spremembe ostanejo lokalne, nove funkcionalnosti razširijo, ne prepišejo, in testi lahko nadomestijo poneverke za prave odvisnosti.