Какова наилучшая практика внедрения зависимостей в Django/Python?
Я работаю над продуктом на основе Django, который работает как прокси между корпоративной ERP и некоторыми мобильными клиентами. Таким образом, предполагается масштабируемость и простота обслуживания в долгосрочной перспективе.
Одна из проблем, с которыми я сейчас сталкиваюсь, - это возможность иметь несколько версий как API, который я предоставляю клиентам, так и API, который я использую из ERP.
У меня есть бизнес-логика в отдельном модуле в каждом приложении с именем
Итак, я дошел до этого пакета 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, а также для этой проблемы с версией, о которой я упоминал.