SOLID ialah lima prinsip reka bentuk untuk membina sistem OOP yang mudah diselenggara dan fleksibel. Masing-masing menangani penyebab umum kod yang kaku dan rapuh.
SOLID ialah lima prinsip reka bentuk untuk membina sistem OOP yang mudah diselenggara dan fleksibel. Masing-masing menangani penyebab umum kod yang kaku dan rapuh.
| Huruf | Prinsip | Makna satu baris |
|---|
| S | Single Responsibility | Satu kelas harus mempunyai satu sebab untuk berubah |
| O | Open/Closed | Terbuka untuk sambungan, tertutup untuk pengubahan |
| L | Liskov Substitution | Subtip mesti boleh digunakan di mana saja jenis asas digunakan |
| I | Interface Segregation | Banyak antarmuka kecil lebih baik daripada satu besar |
| D | Dependency Inversion | Bergantung pada abstraksi, bukan kelas konkrit |
# 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 tidak bergantung pada e-mel secara khusus — gantikan dengan SMS atau ujian dwi tanpa menyentuhnya (D). Menambah jenis pemberitahu baru tidak memerlukan perubahan pada OrderService (O).
SOLID adalah panduan, bukan undang-undang. Terlebih-lebih menerapkannya — satu antarmuka setiap kelas, ketaksukuran di mana-mana — menghasilkan "sup abstraksi" yang lebih sukar diikuti daripada masalah yang diselesaikannya.
SOLID memberikan bahasa diagnostik bersama: pengulas dapat menamakan mengapa satu kelas sukar diubah ("ini melanggar SRP") daripada berdebat mengikut selera.
Dibina dengan bijak, prinsip-prinsip mengurangkan kesan riak — perubahan kekal setempat, ciri baru dilanjutkan daripada ditulis semula, dan ujian boleh menggantikan palsu untuk kebergantungan sebenar.