SOLID ni kanuni tano za ujenzi wa mifumo ya OOP inayotegemeka, inayobadilika. Kila kanuni inashughulikia sababu maalum ya msimamo mgumu, code nyingine iliyofadhailiwa.
| Herufi | Kanuni | Maana ya safu moja |
|---|
| S | Single Responsibility | Darasa linapaswa kuwa na sababu moja ya mabadiliko |
| O | Open/Closed | Wazi kwa upanuzi, iliyofungwa kwa marekebisho |
| L | Liskov Substitution | Aina ndogo lazima ziwe zinazoweza kutumika popote aina ya msingi |
| I | Interface Segregation | Njia nyingi ndogo ni bora kuliko moja kubwa |
| D | Dependency Inversion | Tegemea dhana kamili, si madarasa mahsusi |
# 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 haitegemei baruapepe kwa njia mahsusi — badilisha na SMS au kizazi cha mtihani bila kuigusa (D). Kuongeza aina mpya ya mjumbe haikoi mabadiliko ya OrderService (O).
SOLID ni mwongozo, si sheria. Kutumia zaidi — njia moja kwa darasa, mlalangano kila mahali — kuzalisha "supu ya dhana" ambayo ni ngumu kusundia kuliko tatizo lililotatuliwa.
SOLID inatoa lugha ya kufafanua kwa pamoja: wakabaaji wanaweza kumtaja kwa nini darasa ni ngumu kubadilisha ("hii inapinga SRP") badala ya kujadiliana kwa ladha.
Katika kutumia kwa heshima, kanuni zinarupuka athari za kuzunguka — mabadiliko yanahabari karibu, sifa mpya zinapanua badala ya kuandika upya, na mitihani inaweza kubadilisha wahalifu wa matakwimu badala ya tegemezi halisi.