@nakonechnikistryi

Как уменьшить сложность и тяжеловесность «контроллеров» в API приложениях?

Никак не получается сделать лаконичные контроллеры, и я сомневаюсь в правильности своей архитектуры. Под контроллерами в API приложении я подразумеваю классы, которые обрабатывают http запросы по заданным адресам.

Перед моими контроллерами стоит сразу множество задач:
- валидация входящих данных
- логгировние
- общение с сервисами
- поддержать разные варианты http ответов (статусы http)

К слову внутри сервисов возникает такая же проблема: запросы в базу данных, доменная логика, обращение к внешним сервисам, маппинг данных между абстракциями. Методы становятся большими, нарушается принцип единой ответственности, тяжело поддерживать и покрывать тестами.

Есть ли какие-то рекоммендации или опыт того, как уменьшить сложность?
  • Вопрос задан
  • 49 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Akela_wolf
Extreme Programmer
Путь к уменьшению сложности один - декомпозиция.
Выносить все лишнее в отдельные классы и модули.
Скажем, стоит выносить логику валидации запросов из контроллера в отдельные классы, оставляя в контроллере только абстрактное: валидировать. логировать. передать на обработку. вернуть результат.
Тоже самое в сервисах: выносить логику обращения к БД, обращения к внешним сервисам и т.д., оставляя только то что относится непосредственно к ответственности сервиса

См. книгу Р. Мартин "Чистая архитектура", вот статья об этом на хабре
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы