Junior — Middle
64
Какие компоненты или зависимости меняются местами при использовании принципа инверсии зависимостей?
Ответ от нейросети
sobes.tech AI
Принцип инверсии зависимостей (Dependency Inversion Principle) предполагает, что высокоуровневые модули не должны зависеть от низкоуровневых, а оба должны зависеть от абстракций (например, интерфейсов).
Вместо того, чтобы высокоуровневый компонент напрямую создавал или управлял зависимостями низкоуровневых компонентов, зависимости передаются ему извне (через конструктор, сеттер или фабрику).
То есть меняются местами:
- Конкретные реализации (низкоуровневые модули) перестают управлять собой напрямую.
- Абстракции становятся точкой зависимости для всех компонентов.
Пример на 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 Service:
def __init__(self, db: Database):
self.db = db
def process(self, data):
# ... обработка данных
self.db.save(data)
# Использование
mysql_db = MySQLDatabase()
service = Service(mysql_db)
service.process("данные")
Здесь Service зависит не от конкретной базы, а от абстракции Database. Это и есть инверсия зависимостей.