Я работаю над рефакторингом некоторого кода, который увеличен в приведенном ниже примере.Класс 'main' очень запутан этими блоками try / catch и скрывает то, что делает код.
Я не работаю с Spring, но использую JaxR для обработки исключений.Это будет запись ReST для службы или контроллера, но мы также делаем наши процессы doa здесь (я знаю, но только как это).Поэтому нам нужно вернуть ResponseEntity с необходимой информацией.
public restVerifyName(userId) {
String name;
try {
string name = nameProvider.getName(userId)
} catch (exception A) {
return new errorResponseBuilder(errorCode, errorMessage, status);
} catch (exception B) {
return new errorResponseBuilder(errorCode, errorMessage, status);
}
if (name == null) {
return new errorResponseBuilder(errorCode, errorMessage, status);
}
try {
nameAuthenticator.verifyName(name)
} catch (Exception B) {
return new errorResponseBuilder(errorCode, errorMessage, status);
}
Return Response.Ok().entity(name);
}
private errorResponseBuilder(errorCode, errorMessage, status) {
ErrorResponse errorResponse = errorResponseBuilder(errorCode, errorMessage)
return new Response.status(status).entity(errorResponse);
}
Поэтому я хочу включить эти try / catch в приватные методы и сделать так, чтобы все было немного более самодокументированным.Моя замена примерно равна:
public restVerifyName() {
String name = getName();
if (!nameIsVerfied(name) {
return new errorResponseBuilder(errorCode, errorMessage);
}
Return Response.Ok().entity(name);
}
private String getName() {
String name;
try {
name = nameProvider.getName()
} catch (exception A) {
return new errorResponseBuilder(errorCode, errorMessage);
} catch (exception B) {
return new errorResponseBuilderConflict(errorCode, errorMessage);
}
if (name == null) {
return new errorResponseBuilderConflict(errorCode, errorMessage);
}
return name;
}
private boolean verifyName(name) {
try {
return nameAuthenticator.verifyName(name)
} catch (Exception B) {
return new errorResponseBuilderBadRequest(errorCode, errorMessage);
}
return false;
}
private errorResponseBuilderBadRequest(errorCode, errorMessage) {
ErrorResponse errorResponse = errorResponseBuilder(errorCode, errorMessage)
ResponseEntity response = Response.status(status).entity(errorResponse)
throw new BadRequestException(response)
}
private errorResponseBuilderConflict(errorCode, errorMessage) {
ErrorResponse errorResponse = errorResponseBuilder(errorCode, errorMessage)
ResponseEntity response = Response.status(status).entity(errorResponse)
throw new ConfictException(response)
}
Ответ получен одинаково на обеих станциях.
Независимо от каких-либо логических ошибок / форматирования и т. Д. Какой общий подход является наилучшим?Бросать исключения с ответами или возвращать ответы (в контексте этих примеров цель рефакторинга)
Это в большем масштабе с несколькими другими попытками / ловами, поэтому я чувствую, что удаление беспорядка из «основного» класса болееудобочитаемый.Вызывает ли исключение исключение с responseEntities и позволяет JaxR обрабатывать его?
Спасибо