Какие знаешь принципы разработки?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
SOLID принципы
Single Responsibility Principle (SRP) — класс должен иметь одну причину для изменения. Каждый класс отвечает за одну область функциональности.
# ❌ Плохо: класс делает слишком много
class User:
def save_to_db(self):
pass
def send_email(self):
pass
def validate_password(self):
pass
# ✅ Хорошо: разделена ответственность
class User:
def validate_password(self) -> bool:
return len(self.password) >= 8
class UserRepository:
def save(self, user: User) -> None:
db.commit(user)
class EmailService:
def send(self, to: str, subject: str) -> None:
smtp.send(to, subject)
Open/Closed Principle (OCP) — класс открыт для расширения, но закрыт для модификации. Используй наследование и абстракции.
# ❌ Плохо: нужно менять класс при добавлении нового типа
class PaymentProcessor:
def process(self, payment_type: str, amount: float):
if payment_type == "credit_card":
pass
elif payment_type == "paypal":
pass
# ✅ Хорошо: расширяемо через наследование
from abc import ABC, abstractmethod
class PaymentMethod(ABC):
@abstractmethod
def process(self, amount: float) -> bool:
pass
class CreditCardPayment(PaymentMethod):
def process(self, amount: float) -> bool:
return True
class PaymentProcessor:
def process(self, method: PaymentMethod, amount: float) -> bool:
return method.process(amount)
Liskov Substitution Principle (LSP) — подклассы должны быть заменяемы своими базовыми классами без нарушения функциональности.
Interface Segregation Principle (ISP) — клиент не должен зависеть от интерфейсов, которые он не использует.
Dependency Inversion Principle (DIP) — зависимости от абстракций, не от конкретных реализаций.
from abc import ABC, abstractmethod
class NotificationSender(ABC):
@abstractmethod
def send(self, to: str, body: str) -> None: pass
class EmailSender(NotificationSender):
def send(self, to: str, body: str) -> None:
pass
class NotificationService:
def __init__(self, sender: NotificationSender):
self.sender = sender
DRY, KISS, YAGNI
DRY (Don't Repeat Yourself) — не повторяй код. Выноси в функции и переиспользуй.
KISS (Keep It Simple, Stupid) — простое решение лучше сложного.
YAGNI (You Ain't Gonna Need It) — не добавляй функционал на будущее.
Clean Architecture
Слои: Domain → Application → Infrastructure → Presentation. Зависимости только внутрь. Это обеспечивает тестируемость и гибкость.