Back to questions
Junior — Middle
51
Что подразумевается под термином инверсия в паттерне инверсии зависимостей?
Answer from AI
sobes.tech AI
Термин "инверсия" в паттерне инверсии зависимостей означает изменение направления зависимости между модулями или компонентами. Вместо того, чтобы высокоуровневые модули зависели от низкоуровневых, зависимости "переворачиваются": и высокоуровневые, и низкоуровневые модули зависят от абстракций (например, интерфейсов), а не друг от друга напрямую.
Это позволяет снизить связанность компонентов и повысить гибкость кода. Абстракции управляют зависимостями, а конкретные реализации внедряются извне (например, через конструкторы или контейнеры внедрения зависимостей).
Пример на 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)
# Инверсия зависимости: Service зависит от абстракции Database, а не от конкретной реализации
mysql_db = MySQLDatabase()
service = Service(mysql_db)
service.process('данные')