Я хочу провести рефакторинг этого кода, чтобы извлечь общие части в метод многократного использования, чтобы улучшить удобство обслуживания и уменьшить дублирование. Ниже приведены текущие реализации методов:
Код: Выделить всё
@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));
}
Код: Выделить всё
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));
});
}
Однако я столкнулся с проблемами совместимости типов. Например:
Метод сгиба, используемый службами (userService.deleteUser и tncService.deleteTnC), возвращает OnceMono, что не соответствует напрямую Mono.
Меня смущает тип возвращаемого значения рефакторизованного метода и то, как его интегрировать со службами без изменения существующих методов вызова служб или их типов возвращаемых данных.
Я хочу провести рефакторинг этого кода, гарантируя при этом возврат типы методов (Mono, Mono) остаются неизменными. Будем признательны за любые рекомендации по решению этих проблем или улучшению подхода.
Подробнее здесь: https://stackoverflow.com/questions/793 ... changing-r