Как провести рефакторинг дублирующейся логики в моно-методах службы без изменения типов возвращаемых данных?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как провести рефакторинг дублирующейся логики в моно-методах службы без изменения типов возвращаемых данных?

Сообщение Anonymous »

У меня есть два метода в классе реализации контроллера Spring Boot. Один удаляет пользователя, а другой удаляет TnC (Правила и условия). Оба метода содержат дублирующую логику для обработки ошибок и построения ответов.
Я хочу провести рефакторинг этого кода, чтобы извлечь общие части в метод многократного использования, чтобы улучшить удобство обслуживания и уменьшить дублирование. Ниже приведены текущие реализации методов:

Код: Выделить всё

 @Override
public Mono deleteUser(String userId, ServerWebExchange exchange) {
HttpHeaders responseHeaders = createJsonHeaders();
return userService
.deleteUser(userId, exchange)
.fold(
error -> {
log.error("Error in deleteUser: {}", error);
return new ResponseEntity(null, responseHeaders, error.getStatusCode());
},
response -> new ResponseEntity(HttpStatus.NO_CONTENT));
}

@Override
public Mono deleteTnC(String version, ServerWebExchange exchange) {
HttpHeaders responseHeaders = createJsonHeaders();
return tncService
.deleteTnC(version, exchange)
.fold(
error -> {
log.error("Error in deleteTnC: {}", error);
return new ResponseEntity(null, responseHeaders, error.getStatusCode());
},
response -> new ResponseEntity(HttpStatus.NO_CONTENT));
}

Я попытался реорганизовать общую логику в многоразовый метод под названием handleServiceCall. Вот реализация, которую я написал:

Код: Выделить всё

private  Mono handleServiceCall(
Mono serviceCall,
HttpStatus successStatus,
java.util.function.Function responseTransformer
) {
HttpHeaders responseHeaders = createJsonHeaders();
return serviceCall.map(response -> new ResponseEntity(
responseTransformer.apply(response),
responseHeaders,
successStatus
))
.onErrorResume(error -> {
log.error("Error during service call: {}", error);
return Mono.just(new ResponseEntity(null, responseHeaders, HttpStatus.INTERNAL_SERVER_ERROR));
});
}
Моей целью было устранить дублирующийся код в методах deleteUser и deleteTnC. Я хотел использовать этот переработанный метод для вызовов других служб, таких как updateDomainsVerificationToken.
Однако я столкнулся с проблемами совместимости типов. Например:
Метод сгиба, используемый службами (userService.deleteUser и tncService.deleteTnC), возвращает OnceMono, что не соответствует напрямую Mono.
Меня смущает тип возвращаемого значения рефакторизованного метода и то, как его интегрировать со службами без изменения существующих методов вызова служб или их типов возвращаемых данных.
Я хочу провести рефакторинг этого кода, гарантируя при этом возврат типы методов (Mono, Mono) остаются неизменными. Будем признательны за любые рекомендации по решению этих проблем или улучшению подхода.

Подробнее здесь: https://stackoverflow.com/questions/793 ... changing-r
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»