Что считается приемлемым способом возврата записи из БД со следующими 3 потенциальными результатами:
- Соединение в БД работает, находит пользователя и возвращает заполненный пользовательский объект
- Соединение с БД работает, пользователь не находит, возвращает новый объект пользователя
- Сбой соединения / запрос БД ...
Я по большей частинацеленность на проектирование по контракту:
class Scratch {
public User getUser(int id) {
try {
// Prepare SQL Query
PreparedStatement s = this.connection.prepareStatement(
"select * from get_user(?)"
);
// Provide SQL Parameters
s.setInt(1, id);
// Run our SQL
ResultSet rs = s.executeQuery();
rs.next();
// Extract data into Entity
User user = User.createFromDatabase(rs);
rs.close();
return user;
} catch(Exception e) {
e.printStackTrace();
}
return new User();
}
}
В случае сбоя соединения с БД или запроса немного менее очевидно, что мне следует делать, у меня есть несколько вариантов:
- Возвращает новый пользовательский объект , потому что наш метод согласился вернуть пользователя
- Pro: Это придерживается проектирования по контрактам
- Con: Это делает его похожим на пользователяне существует.
- Возврат null , поскольку он фактически не получил пользователя.
- Pro: Совершенно очевидно, что пользователь не был найден
- Con: Требуется нулевая проверка
- Бросить исключение дальше вверх по цепочке.
- Pro: четко указывает на то, что операция не была достигнута
- Con: не пытается исправить проблемы, в которых они произошли
Я склоняюсь к обработке исключений, поскольку это позволяет избежать ошибки в миллиард долларов, а также поддерживает проектирование по контракту в обычных ситуациях.
Однако я хотел бы знать, есть ли какие-либо очевидные подводные камни или этознакомая ситуация с устоявшимся шаблоном для ее решения.