Sobes.tech
Back to questions
Junior — Middle
50

Могли бы вы привести пример реализации принципа инверсии зависимостей в коде?

Answer from AI

sobes.tech AI

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

Пример:

from abc import ABC, abstractmethod

class Database(ABC):
    @abstractmethod
    def save(self, data):
        pass

class MySQLDatabase(Database):
    def save(self, data):
        print(f"Сохраняем {data} в 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': 'Иван'})

Здесь UserService зависит не от конкретной реализации базы, а от абстракции Database. Это облегчает замену реализации и тестирование.