Допустим, у нас есть класс manager с методом get(), отвечающим за получение данных объекта из БД. Клиентский код дёргает этот метод - он должен вернуть объект.
Вопрос - как должен вести себя экземпляр класса и клиентский код, если например объекта с запрошенным ключем в БД не оказалось?
Вариант 1. Метод get() при неудачном поиске в БД возвращает код ошибки, например, -1, клиент проверяет - пришел объект или код. Если это не экземпляр нужного класса, через условный оператор проверяется номер ошибки, и бросается исключение, которое в конце клиентского кода отлавливается и пишется в лог (юзеру мы ничего не показываем, кроме "извините, произошла ошибка").
Вариант 2. Сам метод get() бросает исключение с текстом вроде "item was not fund", которое также отлавливается в клиентском коде. Но тут вопрос - если объект не найден в БД - это исключение, или всё-таки один из вариантов нормальной работы, при котором можно просто вернуть код?
Во всех ORM реализовано два вида:
- get(id) возвращает объект по ключу и вызывает ошибку, если не нашел
- find(id) возвращает объект по ключу и Null если не найден объект.
Пользоваться ими нужно в зависимости от контекста.