Основы SOLID
https://заметочки.com/p/dosochka-hTDL6VKAOIdi
Основы SOLID
SOLID — это набор принципов объектно-ориентированного проектирования, предложенных Робертом Мартином (Uncle Bob). Эти принципы помогают создавать код, который легко поддерживать и расширять. Каждый принцип направлен на улучшение качества и гибкости программного обеспечения.
1. Принцип единственной ответственности (Single Responsibility Principle, SRP)
Каждый класс должен иметь только одну причину для изменения. Это означает, что класс должен выполнять только одну функцию и не должен зависеть от других функций.
class UserRepository:
def save(self, user):
# Сохранение пользователя в базу данных
pass
class UserService:
def create_user(self, user_data):
user = User(user_data)
repository = UserRepository()
repository.save(user)2. Принцип открытости/закрытости (Open/Closed Principle, OCP)
Программные сущности (классы, модули, функции) должны быть открыты для расширения, но закрыты для модификации. Это означает, что новые функции должны добавляться путем расширения, а не изменения существующего кода.
class Shape:
def area(self):
pass
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height3. Принцип подстановки Барбары Лисков (Liskov Substitution Principle, LSP)
Объекты в программе должны быть заменяемы их подтипами без изменения корректности программы. Это означает, что подклассы должны корректно реализовывать поведение базового класса.
class Bird:
def fly(self):
pass
class Sparrow(Bird):
def fly(self):
print("Sparrow flying")4. Принцип разделения интерфейса (Interface Segregation Principle, ISP)
Клиенты не должны зависеть от методов, которые они не используют. Это означает, что интерфейсы должны быть разделены на более мелкие и специфичные интерфейсы, чтобы клиенты могли использовать только те методы, которые им нужны.
class IWorker:
def work(self):
pass
class IEater:
def eat(self):
pass5. Принцип инверсии зависимостей (Dependency Inversion Principle, DIP)
Модули высокого уровня не должны зависеть от модулей низкого уровня. Оба типа модулей должны зависеть от абстракций. Абстракции не должны зависеть от деталей; детали должны зависеть от абстракций.
class IUserRepository:
def save(self, user):
pass
class UserService:
def __init__(self, repository: IUserRepository):
self.repository = repositoryТаблица принципов SOLID
Принцип | Описание |
|---|---|
SRP | Каждый класс должен иметь только одну причину для изменения |
OCP | Программные сущности должны быть открыты для расширения, но закрыты для модификации |
LSP | Объекты должны быть заменяемы их подтипами без изменения корректности программы |
ISP | Клиенты не должны зависеть от методов, которые они не используют |
DIP | Модули высокого уровня не должны зависеть от модулей низкого уровня |
Эти принципы помогают создавать более гибкий и поддерживаемый код, уменьшая его сложность и повышая его качество.
<img src="https://example.com/solid.png" alt="SOLID principles">
<img src="<mediaId>" alt="Превью заметки" style="width:100%">