Мы не ищем легких путей…
Рубрика: Development, Java, Юмор | 11 February 2008, 15:44 |
Vadim Voituk
Порою копаешься, по локти в де%ме, в коде, написанном разработчиками одной из самых доходных украинских компаний и начинаешь подозревать что им в буфете траву в кофе подсыпают.
Вообще я очень терпимо отношусь к чужому коду, и за последних несколько месяцев уже перестал удивляться разнообразным ляпсусам и ошибкам, связанными с неопытностью или незнанием – возможно на проект прийшел новичок, не все изучил, ещё не все узнал, опыта пока не набрался, документацию не дали или ещё недочитал и тд.
Но только что нашел настолько феноменальную реализацию проверки наличия записи в таблице БД, что удержаться не смог:
Немного упрощенная версия кода, без обработки исключений (это отдельная история!), соединений с БД и тд, все имена, фамилии, явки, изменены, все совпадения с реальными частями кода являются случайностью :)
...
Collection items = new ArrayList();
String sql = "SELECT '1'\n" +
" FROM ... "; // тут следует большая куча неформатированного sql-кода
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, this.getId());
pstmt.setInt(2, itemID);
rs = pstmt.executeQuery();
while (rs.next()) {
items.add(rs.getString(1));
}
...
return !items.isEmpty();
И это наш, родной украинский парень – а вы говорите “индусы, индусы”…
Tweet
Ну я думаю все мы не без греха и все когда-нибудь подобное написали в спешке или еще по какой-то иной причине :)
Это как должны быть повернуты мозги, чтоб придумать ТАКУЮ реализацию?
Для незнающих про COUNT() есть еще метод “выполнить запрос, пройтись по всем строкам увеличивая счетчик количества строк”.
Зато запрос оптимизирован! Можно ведь было написать “select * from … “, а тут “select 1 from … “.
wheleph: Ну тогда в следующий раз будешь сам этот код рефакторить :)
А что в этом коде НЕ ТАК?
А что в нем ТАК?
Или ты таким же образом проверяешь наличие записи в БД?
Этот код, возможно, был уже отрефакторен)))
Вполне нормальный код. Несогласные могут привести свои варианты.
Этот код отрефакторен не был и он является частью метода с аналогичными запросами длиной в 250-300 строк :)
Свои варианты были приведены выше.
Пешыте примеры кода. Со всеми проверками, явками, ставками и пр.
return rs.next();
В finally аккуратно зачищаем ресурсы.
Шо, влом? Вот ему тоже было влом.
Ему то ак раз не влом было написать лишних 10 строк кода :)
Вероятно, сначала этот код выглядел не так. Собирались айдишники или еще какая хрень.
To Chabster:
это ты писал ))) признавайся )))