Чем пытаются заменить singleton в современных фреймворках
Python
Middle
Без компании
Чем пытаются заменить singleton в современных фреймворках
Ответы
В современных фреймворках singleton заменяют dependency injection (DI) и контейнеры зависимостей. Это более гибкий и тестируемый подход, позволяющий управлять жизненным циклом объектов централизованно.
Пример с FastAPI:
```
from fastapi import Depends, FastAPI
app = FastAPI()
class Service:
def do_something(self):
return "Result"
# Вместо синглтона - инжектируем зависимость
def get_service() -> Service:
return Service()
@app.get("/")
async def root(service: Service = Depends(get_service)):
return {"message": service.do_something()}
```
Преимущества DI перед singleton:
- Лучшая тестируемость (легко подменить реализацию)
- Контроль времени жизни объектов
- Четкая декларация зависимостей
- Поддержка разных контекстов выполнения
В Django аналогично используют `@lru_cache` или кастомные менеджеры зависимостей.