Dependency Injection (DI) — это паттерн проектирования, при котором объект получает свои зависимости извне, а не создаёт их внутри себя. Вместо того чтобы жёстко кодировать зависимость, ты передаёшь её как параметр — обычно через конструктор.
class Service:
def __init__(self, database):
self.db = database # Зависимость внедряется извне
Здесь Service не создаёт объект database самостоятельно — он получает его. Это значит, что ты можешь передать любой совместимый объект базы данных при создании экземпляра Service.
Без DI класс создаёт свои зависимости внутри, что делает их невозможными для замены при тестировании. С DI ты можешь легко внедрить мок или стаб:
mock_db = MockDatabase()
service = Service(database=mock_db) # Реальная БД не нужна в тестах
Это позволяет юнит-тестам работать в изоляции, без опоры на реальные базы данных или внешние сервисы.
Dependency Injection способствует слабой связанности между компонентами. Передавая зависимости как параметры вместо жёсткого кодирования, твой код становится:
При dependency injection класс получает свои зависимости как параметры извне, вместо того чтобы создавать их внутри себя, что позволяет легко заменять зависимости во время тестирования.
Новый — ещё не проверен сообществом
Вы