@I_suss

Существует ли обобщение контроллеров?

Я изучаю spring и создают свой веб сервис и возник вопрос: возможно ли как то обобщить контроллеры ?
Допустим есть у меня 3 сущности к этим 3 сущностям не составляет труда написать контроллеры, а что делать если их будет штук 20 ? или 30 ? под каждую сущность писать контроллеры ? можно ли как то сократить данную работу ? есть возможно, так сказать "обобщить" сие чудо ?
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
Сколько нужно, столько и пишется. В чём проблема?
Вообще такое, чтобы абсолютно у всех сущностей была одинаковая логика и что сущности 1-в-1 маппятся на контроллеры - это редкий случай.

Хорошая практика - использовать контроллеры только для роутинга, в такой ситуации методы контроллеров однострочные получаются и если нужны какие-то обобщения - ты легко можешь их реализовать на слое сервисов.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
@Wan-Derer
Зобанели на Хабре, волки́ ;((
Контроллеры пишутся не "для сущностей", это точки входа в твой сервер, которые все вместе образуют API.
Иногда эти точки однозначно мапятся на сущности (например, "получить список пользователей"), иногда нет.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
В ООП существует 2 правильных пути расширения функционала.

1) Наследование. Ты делаешь базовый контроллер с какими-то общими функциями. И другие контроллеры просто наследуются от базового. Наследование всегда красиво выглядит на диаграмме классов. Такое и приятно показывать на презетнациях. И заказчик доволен. Недостаток наследования - иногда в наследника попадает то что не нужно. И в этом случае наследование нужно просто дробить на большее число уровней. 2-3-4 и так далее.
2) Композиция. Ты включаешь внутрь одного контроллера один или несколько функционалов от других контроллеров. Композиция не имеет пределов вообще. Можно композировать что угодно и с чем угодно. Композицию используют даже люди которые на знают ООП. И не на ООП языках. Просто у них для этого есть другие названия.

К сожалению программирование на аннотациях делает из разработчиков ООП некий слабый подвид разработчиков которые перестают думать в парадигме ООП и зачем-то начинают искать другие пути
разработки. Зачем - непонятно.
Ответ написан
Комментировать
@stas1212
А как ты себе сам это представляешь - вот у тебя есть некий "обобщенный" контроллер и метод Get в нем, один пользователь хочет получить всех обезьян из таблицы обезьяна, а другой хочет всех слонов из таблицы слонов)

Поэтому каждый контроллер это некая точка входа для работы с конкретной моделью предметной области

Теоретически это все можно сделать, если заморочиться с интерфейсами, дженериками и попотеть над маппером- только для чего все это нужно? Обычно контроллер это то, за что дергают твой сервис, и он должен быть максимально прост для понимания, так как с ним будут интегрироваться другие внешние сервисы- вот представь, что ты решил написать сервис по онлайн продаже товаров, своих у тебя нет, и ты решаешь взять АПИ амазона, брать оттуда всю инфу по товарам, добавлять свою наценку и отдавать своим пользователям, вот представь, что тебе дадут обобщенный контроллер- где будет выдача и пылесосов и прокладок- как ты реализуешь интеграцию с таким апи? Поэтому не выдумывай велосипед
Ответ написан
Комментировать
azerphoenix
@azerphoenix Куратор тега Spring
Java Software Engineer
Если лень писать код, то попробуйте Spring Data REST. Там еще под капотом Spring HATEOAS. Он может сгенерировать для вас контроллеры. Вам нужно будет создать модели и добавить методы в репо
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы