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. Это облегчает замену реализации и тестирование.