Проблема
По мере развития проекта обработчики роутов (endpoints) могут начать содержать слишком много бизнес-логики.
Это усложняет:
- чтение кода;
- тестирование;
- повторное использование логики;
- дальнейшую поддержку проекта.
Роут должен отвечать только за обработку HTTP-запроса:
- принять и проверить входные данные;
- вызвать нужную бизнес-логику;
- вернуть ответ.
Вся бизнес-логика должна постепенно выноситься в отдельные сервисы.
Цель
Поддерживать роуты небольшими и понятными.
Если обработчик начинает заметно разрастаться или в нем появляется сложная логика, ее следует переносить в app/services.
Пример структуры:
app/
├── routers/
├── services/
│ ├── orders.py
│ └── queue.py
├── models/
└── ...
Критерии
- роуты остаются компактными;
- бизнес-логика не дублируется между роутами;
- сервисы можно тестировать независимо от HTTP;
- шаблоны Jinja2 отвечают только за отображение данных.
Примечание
Это не задача на немедленный рефакторинг.
Пока проект небольшой, текущая структура допустима. Переносить код в сервисы следует постепенно, по мере усложнения функциональности.
Проблема
По мере развития проекта обработчики роутов (endpoints) могут начать содержать слишком много бизнес-логики.
Это усложняет:
Роут должен отвечать только за обработку HTTP-запроса:
Вся бизнес-логика должна постепенно выноситься в отдельные сервисы.
Цель
Поддерживать роуты небольшими и понятными.
Если обработчик начинает заметно разрастаться или в нем появляется сложная логика, ее следует переносить в
app/services.Пример структуры:
app/
├── routers/
├── services/
│ ├── orders.py
│ └── queue.py
├── models/
└── ...
Критерии
Примечание
Это не задача на немедленный рефакторинг.
Пока проект небольшой, текущая структура допустима. Переносить код в сервисы следует постепенно, по мере усложнения функциональности.