SOLID principy vedou k udržovatelnému, rozšiřitelnému kódu. Ne dogma, ale užitečné guidelines.
S — Single Responsibility¶
❌ Špatně — třída dělá vše¶
class UserManager: def create_user(self, data): … def send_email(self, user): … def generate_report(self, users): …
✅ Správně — oddělené zodpovědnosti¶
class UserService: def create_user(self, data): … class EmailService: def send_welcome(self, user): … class ReportService: def generate(self, users): …
O — Open/Closed¶
Otevřený pro rozšíření, uzavřený pro modifikaci¶
class PaymentProcessor(Protocol): def process(self, amount: float) -> bool: … class StripePayment: def process(self, amount: float) -> bool: … class PayPalPayment: def process(self, amount: float) -> bool: …
Přidání nového typu = nová třída, ne modifikace existující¶
D — Dependency Inversion¶
❌ Vysokoúrovňový modul závisí na nízkoúrovňovém¶
class OrderService: def __init__(self): self.db = PostgresDB() # Hard dependency
✅ Závisí na abstrakci¶
class OrderService: def __init__(self, db: DatabasePort): self.db = db # Injected, testable
L — Liskov Substitution & I — Interface Segregation¶
- Liskov: Podtřída musí být zaměnitelná za rodičovskou
- Interface Segregation: Malé, specifické interfaces místo jednoho velkého
Klíčový takeaway¶
SRP: jedna třída = jedna zodpovědnost. DIP: závisejte na abstrakcích. SOLID jako guidelines, ne dogma.