У меня есть служба, которая сохраняет древовидную структуру в базе данных. Прежде чем сохранить дерево, оно проверяется, и во время проверки некоторые вещи могут пойти не так. В дереве могут быть повторяющиеся узлы, или в узле может отсутствовать важное поле (например, его сокращение, полное имя или уровень).
Чтобы сообщить службе, что пошло не так, я использую исключения. Когда метод validateTree () сталкивается с проблемой, он генерирует соответствующее исключение. Затем класс HttpService использует это исключение для формирования соответствующего ответа (например, в ответ на вызов AJAX).
public class HttpService {
private Service service;
private Logger logger;
// ...
public HttpServiceResponse saveTree(Node root) {
try {
service.saveTree(root);
} catch (DuplicateNodeException e) {
return HttpServiceResponse.failure(DUPLICATE_NODE);
} catch (MissingAbbreviationException e) {
return HttpServiceResponse.failure(MISSING_ABBREV);
} catch (MissingNameException e) {
return HttpServiceResponse.failure(MISSING_NAME);
} catch (MissingLevelException e) {
return HttpServiceResponse.failure(MISSING_LEVEL);
} catch (Exception e) {
logger.log(e.getMessage(), e. Logger.ERROR);
return HttpServiceResponse.failure(INTERNAL_SERVER_ERROR);
}
}
}
public class Service {
private TreeDao dao;
public void saveTree(Node root)
throws DuplicateNodeException, MissingAbbreviationException, MissingNameException, MissingLevelException {
validateTree(root);
dao.saveTree(root);
}
private void validateTree(Node root)
throws DuplicateNodeException, MissingAbbreviationException, MissingNameException, MissingLevelException {
// validate and throw checked exceptions if needed
}
}
Я хочу знать, это хорошее использование исключений? По сути, я использую их для передачи сообщений об ошибках. В качестве альтернативы мой метод saveTree () должен возвращать целое число, и это целое число будет передавать ошибку. Но для того, чтобы сделать это, я должен был документировать, что означает каждое возвращаемое значение. Кажется, это больше в стиле C / C ++, чем в Java. Является ли мое текущее использование исключений хорошей практикой в Java? Если нет, то какая лучшая альтернатива?