Ответ
SOLID — это мнемонический акроним для пяти ключевых принципов объектно-ориентированного проектирования, сформулированных Робертом Мартином. Их цель — создание более понятных, гибких и поддерживаемых программных систем.
Следование этим принципам помогает избежать "хрупкого" кода, который ломается при малейших изменениях, и упрощает рефакторинг и расширение функциональности.
Принципы SOLID:
- S - Single Responsibility Principle (Принцип единственной ответственности) Класс должен иметь только одну причину для изменения, то есть выполнять только одну основную задачу.
- O - Open/Closed Principle (Принцип открытости/закрытости) Программные сущности (классы, модули) должны быть открыты для расширения, но закрыты для модификации.
- L - Liskov Substitution Principle (Принцип подстановки Барбары Лисков) Объекты в программе должны быть заменяемы на экземпляры их подтипов без изменения правильности выполнения программы.
- I - Interface Segregation Principle (Принцип разделения интерфейса) Лучше иметь много специализированных интерфейсов, чем один универсальный.
- D - Dependency Inversion Principle (Принцип инверсии зависимостей) Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба должны зависеть от абстракций.
Пример (Нарушение и исправление SRP):
Неправильно: Класс Order отвечает и за данные заказа, и за его сохранение в базу данных.
class Order:
def __init__(self, items):
self.items = items
# Этот метод нарушает SRP
def save_to_database(self):
# ... сложная логика подключения к БД и сохранения ...
print("Order saved to DB")
Правильно: Ответственность за сохранение вынесена в отдельный класс OrderRepository.
class Order:
def __init__(self, items):
self.items = items
class OrderRepository:
def save(self, order: Order):
# ... логика сохранения ...
print(f"Saving order with {len(order.items)} items to DB")
# Использование:
my_order = Order(["item1", "item2"])
repository = OrderRepository()
repository.save(my_order)