У меня есть бэкэнд, который обеспечивает API REST, каждая конечная точка отображается с методом обработчика внутри контроллера. < /p>
Код состоит из нескольких операций, включая проверки, валидацию, отображения и т. Д. Все это повторно повторно во многих других контроллерах. users/{id}
Сервер должен проверить:
[*] Проверьте, что пользователь с данным идентификатором существует, вернуть 404 в противном случае.
Проверьте потребитель. /> Проверьте входные данные действительны, вернуть 400 в противном случае. < /p>
< /li>
изменить пользователя в базе данных. < /p>
< /li>
map недавно измененный пользователь в DTO и возвращается. Подумайте, чтобы абстрагировать это, чтобы уменьшить код парикматериала в контроллерах, но мне не нравится идея абстрактного контроллера, с этим может стать трудно работать, если придут новые требования и необходимы настройки. Объекты, которые будут действовать как оркестратор для этих операций.
UpdateOrchestrator orchestrator = new UpdateOrchestrator();
orchestrator.onLoadObject(() -> objectRepo.load(id));
orchestrator.onCheckPermissions(object -> permissionService.hasPermission(object));
orchestrator.onValidate(data -> validator.validate(data));
orchestrator.onUpdate(object -> objectRepo.update(object));
UserDto user = orchestrator.execute(mapper, inputData);
< /code>
Orchestrator Внутренне управляет всеми операциями и бросает исключения, если проверки не стержены. < /p>
Что вы думаете о таких решениях? Стоит ли абстрагировать поток и просто подключить то, что необходимо? Какие недостатки вы видите в этом решении?>
Подробнее здесь: https://stackoverflow.com/questions/797 ... ontrollers