Что является лучшей практикой для Dependency Injection в Django/Python?

Я работаю над продуктом на основе Django, который работает как посредник/прокси между корпоративной ERP и некоторыми мобильными клиентами. Поэтому он должен обладать масштабируемостью и простотой обслуживания в долгосрочной перспективе.

Одна из проблем, с которой я сейчас сталкиваюсь, это возможность иметь множество версий как для API, которые я выставляю клиентам, так и для API, которые я потребляю из ERP.

Я располагаю свою бизнес-логику в отдельном модуле в каждом приложении под названием *_usecase.py, по существу я должен реализовать версионность, имея базовый класс UseCase и переопределяя методы для каждой версии и предоставляя нужный экземпляр класса для просмотра через DI на основе значений заголовков запроса/ответа.

Итак, я добрался до этого пакета python-inject. В нем есть довольно аккуратные декораторы для инъекции экземпляров на основе имеющейся у вас конфигурации и аннотация типа для параметров метода. что-то вроде:

# in view.py
@inject.autoparams()
def send_notification(
    request, 
    use_case: SendNotificationUseCase, 
    # as many type annotated parameters you required
):
    pass

# in binder.py
binder.bind_to_provider(
    SendNotificationUseCase, 
    self.provide_send_notification_use_case
)
def provide_send_notification_use_case(self):
        # some check and logic to evaluate appropriate version
        return SendNotificationUseCaseV1() # v1 implementation of usecase

Итак, этот пакет в конечном итоге делает свою работу, хотя у меня были некоторые незначительные проблемы с ним, но, поскольку у него не так много звезд и я не видел его использования где-либо в сообществе, я хочу знать, есть ли у вас, ребята, лучшее/более питоническое решение для Dependency Injection в Django/Python, а также для этой проблемы версионирования, о которой я упоминал.

Вернуться на верх