Какова наилучшая практика внедрения зависимостей в Django/Python?

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

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

У меня есть бизнес-логика в отдельном модуле в каждом приложении с именем по сути, я должен реализовать управление версиями, имея базовый класс 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
class AppNameBinder(BaseBinder):
    def __call__(self, binder, *args, **kwargs):
        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

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

0 ответов

Другие вопросы по тегам