Back to questions
Junior — Middle
77
Можете объяснить суть принципа Dependency Inversion Principle (DIP)?
Answer from AI
sobes.tech AI
Принцип инверсии зависимостей (Dependency Inversion Principle, DIP) — один из пяти принципов SOLID, который гласит:
- Модули высокого уровня не должны зависеть от модулей низкого уровня. Оба должны зависеть от абстракций.
- Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Это означает, что вместо того, чтобы класс напрямую создавал или использовал конкретные реализации, он должен работать с абстракциями (например, интерфейсами или абстрактными классами). Это повышает гибкость и облегчает тестирование.
Пример на Python:
from abc import ABC, abstractmethod
class Database(ABC):
@abstractmethod
def save(self, data):
pass
class MySQLDatabase(Database):
def save(self, data):
print(f"Saving {data} to MySQL")
class UserService:
def __init__(self, db: Database):
self.db = db
def add_user(self, user):
self.db.save(user)
# Использование
mysql_db = MySQLDatabase()
service = UserService(mysql_db)
service.add_user("John")
Здесь UserService зависит от абстракции Database, а не от конкретной реализации MySQLDatabase.