SOLID हे टिकाऊ, लवचिक OOP प्रणाली तयार करण्यासाठी पाच डिজाइन तत्त्वे आहेत. प्रत्येक कठोर, नाजूक कोडचे एक सामान्य कारण सोडवते.
| अक्षर | तत्त्व | एक ओळीचा अर्थ |
|---|
| S | Single Responsibility | वर्गाला बदलण्याचे केवळ एक कारण असावे |
| O | Open/Closed | विस्तारासाठी खुले, सुधारणेसाठी बंद |
| L | Liskov Substitution | उप-प्रकार मूळ प्रकार असलेल्या कुठेही वापरता येऊ शकतात |
| I | Interface Segregation | एक फॅट इंटरफेसपेक्षा अनेक लहान इंटरफेस चांगले |
| D | Dependency Inversion | ठोस वर्गांऐवजी अमूर्ततांवर अवलंबून रहा |
# 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 विशेषतः ईमेलवर अवलंबून नाही — याला न टाकता SMS किंवा चाचणी डबल बदला (D). नवीन सूचक प्रकार जोडल्याने OrderService मध्ये कोणताही बदल आवश्यक नाही (O).
SOLID मार्गदर्शन आहे, कायदा नाही. त्याचा अत्यधिक वापर — प्रत्येक वर्गाचा इंटरफेस, सर्वत्र अप्रत्यक्षता — "अमूर्ततेचे सूप" तयार करते जे समस्या सोडवते त्यापेक्षा अनुसरण करणे अधिक कठीण आहे.
SOLID एक साझा निदान भाषा प्रदान करते: समीक्षकांना वर्गाला बदलण्यास का कठिण आहे हे नाव देता येते ("हे SRP चा उल्लंघन करते") रुचीने वाद घालण्याऐवजी.
विवेकाने लागू केल्यावर, हे तत्त्वे तरंग प्रभाव कमी करतात — बदल स्थानिक राहतात, नवीन वैशिष्ट्य पुन्हा लिहिण्याऐवजी विस्तारित करतात, आणि परीक्षा खरे अवलंबनांची जागा खोटे घटक घेऊ शकतात.