Sobes.tech
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('данные')