Что такое dependency injection?
1️⃣ Как кратко ответить
Dependency Injection (DI) — это паттерн проектирования, который позволяет объектам получать свои зависимости извне, а не создавать их самостоятельно. Это способствует более слабой связанности кода и упрощает тестирование и поддержку.
2️⃣ Подробное объяснение темы
Dependency Injection (DI) — это паттерн проектирования, который используется для достижения инверсии управления (IoC) между классами и их зависимостями. Основная идея DI заключается в том, чтобы передавать зависимости объекта извне, а не создавать их внутри объекта. Это позволяет улучшить модульность, тестируемость и поддерживаемость кода.
Зачем это нужно
- Слабая связанность: DI уменьшает связанность между классами, что упрощает замену и модификацию зависимостей без изменения кода, который их использует.
- Тестируемость: DI позволяет легко заменять реальные зависимости на моки или стабы при тестировании, что упрощает написание юнит-тестов.
- Упрощение кода: DI упрощает код, так как объекты не отвечают за создание своих зависимостей.
Как работает
class Database:
def connect(self):
return "Connected to the database"
class Service:
def __init__(self, database: Database):
# Внедрение зависимости через конструктор
self.database = database
def perform_action(self):
# Использование зависимости
return self.database.connect()
# Создание экземпляра зависимости
db = Database()
# Внедрение зависимости в объект Service
service = Service(db)
# Вызов метода, который использует зависимость
print(service.perform_action())
-
class Database: Это класс, представляющий зависимость. Он содержит метод
connect, который возвращает строку, указывающую на успешное подключение к базе данных. -
class Service: Это класс, который зависит от
Database. В его конструкторе принимается объектDatabase, который сохраняется как атрибутself.database. -
def init(self, database: Database): Конструктор класса
Service, который принимает объектDatabaseв качестве параметра. Это пример внедрения зависимости через конструктор. -
def perform_action(self): Метод, который использует зависимость
Databaseдля выполнения действия. Он вызывает методconnectобъектаDatabase. -
db = Database(): Создание экземпляра класса
Database, который будет передан вService. -
service = Service(db): Создание экземпляра класса
Serviceс передачей зависимостиdbв конструктор. -
print(service.perform_action()): Вызов метода
perform_action, который использует внедренную зависимость для выполнения действия.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться