вторник, 4 мая 2010 г.

Отличия 'get X' от 'find X'

Наблюдение из разряда 'мелочи, которые облегчают жизнь' (и способствуют взаимопониманию).
Есть методы для поиска/получения 'нечто' и есть 2 основных разновидности поведения в случае, если результат не найден (или не может быть получен):
  • вернуть null или пустую коллекцию
  • толкнуть исключение (например ItemNotFoud)

Впервые на эту разницу обратил внимание в ORM framework-ах. Ка правило, если это метод getXXX, то он либо возвращает результат либо толкает исключение, а если это findXXX, то он возвращает результат либо пустое значение (null или пустую коллекцию).

т.е. имеем 2 сигнатуры:
/**
* @return not nullable result
*/
Item getItem() throws ItemNotFound;

/**
* @return result or null
*/
Item findItem();
Все выглядит логично и понять что "выдает" метод несложно и без комментариев.

Но, к сожалению, на практике иногда приходится сталкиваться вот с таким:
/**
* @return result or null
*/
Item findItem() throws ItemNotFound;
//Забавная задачка 'предугадай поведение' :)


Кстати, для более 'безопасной' реализации find методов имеет смысл воспользоваться шаблоном 'NullObject' - с учетом того, что народ читать комментарии (а тем более писать их) не любит, число NullPointerException и конструкций 'if(null != )' может сократиться на порядок.

Комментариев нет:

Отправить комментарий