Sobes.tech
Junior — Middle
71

Объясните принцип инверсии зависимостей и его роль в управлении зависимостями в приложениях.

Companies where asked
СБЕР Бизнес
Вкусно и точкаВкусно и точка

Answer from AI

sobes.tech AI

Принцип инверсии зависимостей (Dependency Inversion Principle, DIP) заключается в том, что модули верхнего уровня не должны зависеть от модулей нижнего уровня напрямую. Вместо этого и те, и другие должны зависеть от абстракций (например, интерфейсов).

Это помогает управлять зависимостями в приложениях, делая код более гибким и тестируемым. Вместо жёсткой привязки к конкретным реализациям, компоненты взаимодействуют через абстракции, что облегчает замену и расширение функционала.

Пример на 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 create_user(self, user_data):
        self.db.save(user_data)

# Использование
mysql_db = MySQLDatabase()
service = UserService(mysql_db)
service.create_user({'name': 'Alice'})

Здесь UserService зависит от абстракции Database, а не от конкретной реализации MySQLDatabase.