Это еще одна дискуссионная тема, но на этот раз я ищу только простые и документированные ответы. Сценарий:
Давайте предположим следующий метод:
public static Hashtable<Long, Dog> getSomeDogs(String colName, String colValue) {
Hashtable<Long, Dog> result = new Hashtable<Long, Dog>();
StringBuffer sql = null;
Dog dog = null;
ResultSet rs = null;
try {
sql = new StringBuffer();
sql.append("SELECT * FROM ").append("dogs_table");
sql.append(" WHERE ").append(colName).append("='");
sql.append(colValue).append("'");
rs = executeQuery(sql.toString());
while (rs.next()) {
dog= new Dog();
//...initialize the dog from the current resultSet row
result.put(new Long(dog.getId()), dog);
}
}
catch (Exception e) {
createErrorMsg(e);
result = null; //i wonder....
}
finally {
closeResultSet(rs); //this method tests for null rs and other stuff when closing the rs.
}
return result;
}
Вопросы:
1. Какие способы вы предлагаете улучшить эту технику возвращения некоторых собак с определенным атрибутом?
2. rs.next () вернет false для нулевого ResultSet или сгенерирует исключение, например:
String str = null;
System.out.println (str.toString ());
3. Что если при инициализации объекта dog из текущей строки ResultSet произойдет что-то плохое, например: сбой соединения, несовместимое значение было передано в установщик свойств dog и т. Д.? У меня сейчас может быть 10 элементов в хеш-таблице или ни одного (первая строка). Какими будут следующие действия: а) вернуть нулевую хеш-таблицу; б) вернуть результат хеш-таблицы, такой, какой она есть на данном этапе; в) бросить исключение: какой тип исключения будет здесь?
4. Я думаю, вы все согласитесь с этим: ничего плохого не происходит, на запросе нет строк, будет возвращено нулевое значение. Однако @ Thorbjørn Ravn Andersen сказал здесь , что я должен вернуть NullObject вместо нулевого значения. Интересно, что это?
5. Я заметил, что люди и группы людей говорят, что нужно разбить приложение на слои или уровни. Учитывая приведенный выше пример, какие здесь слои, кроме тех, о которых я могу подумать:
Layer1 :: Уровень базы данных, где выполняются действия: этот метод.
Layer2 :: ??? : некоторый слой, в котором построен новый объект Dog: мой объект Dog.
Layer3 ::? : какой-то слой, где я собираюсь что-то сделать с коллекцией собак: слой GUI, в основном, или подуровень пользовательского интерфейса.
Если после 1-го уровня возникает исключение, что лучше всего с ним делать? Мои мысли: поймать исключение, зарегистрировать исключение, вернуть какое-то значение. Это лучшая практика?
Мэнни, спасибо за ваши ответы, я с нетерпением жду, чтобы узнать, что другие люди думают об этом.