SOLID huma ħamsa prinċipji ta' disinn għall-bini ta' sistemi OOP li jistgħu jintumeġħu u flessibli. Kull waħda tindirizza kawża komuni ta' kodiċi rigidu u fragili.
SOLID huma ħamsa prinċipji ta' disinn għall-bini ta' sistemi OOP li jistgħu jintumeġħu u flessibli. Kull waħda tindirizza kawża komuni ta' kodiċi rigidu u fragili.
| Ittra | Prinċipju | Tifsira f'linja waħda |
|---|
| S | Single Responsibility | Klassi għandha jkollha raġuni waħda biss biex tibdel |
| O | Open/Closed | Miftuħa għall-estensjoni, magħluqa għal modifika |
| L | Liskov Substitution | Is-sottotipoi għandhom jkunu użabbli kull- fejn it-tip bażi |
| I | Interface Segregation | Ħafna interfaċċi żgħar aħjar minn interfaċċa waħda kbira |
| D | Dependency Inversion | Dipendi minn astrazzjonijiet, mhux klassiet konkreti |
# 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 ma jiddipendix fuq il-posta elettronika speċifikament — ibdel bis-SMS jew test double mingħajr ma ttokka (D). L-għidda ta' tip mħabar ġdid ma teħtieġ ebda bidla għal OrderService (O).
SOLID hija gwida, mhux liġi. Tapplikaha wisq — interfaċċa għal kull klassi, indirezzjoni kullimkien — tipproduċi "shorba ta' astrazzjoni" li hilier issegwi mit-problema li ssolvet.
SOLID tagħti lingwa diagnostika maqsuma: ir-reviuturi jistgħu ismu għaliex klassi hija diffiċli biex tinbidel ("din tikkiser SRP") minflok ma jargumenta bit-togħma.
Applikata b'ġudizzju, il-prinċipji jnaqqsu l-effetti ta' mawġ — il-bidliet jibqgħu lokali, il-features ġodda jestendu minflok jerġgħu jiktbu, u t-testijiet jistgħu jissostitwixu l-fittizji għad-dipendenzji reali.