@springimport

Что нужно возвращать: null или false?

Сколько уже написал разных функций, но так и не понял что нужно возвращать в разных ситуациях. Например, у меня есть ProductRepository. В методе save я должен вернуть true или false или выбросить исключение - это понятно. В методе delete будет тоже самое. А в методе find я должен вернуть ответ или не найдено. Является ли "не найдено" исключительной ситуацией и если нет, то что мне нужно вернуть: null или false? А если я хочу прочитать данные из файла, то если он пустой то что возвращать, null? Возможно, надо смотреть в зависимости от ситуации. Хотел бы раз и навсегда понять что делать в таких ситуациях. Расскажите в двух словах.

UPD:
Посмотрел как сделано в Symfony.
/**
 * ...
 * 
 * @return object|null
 */
public function findOneBy(array $criteria, array $orderBy = null)
{
}

/**
 * ...
 *
 * @return array
 */
public function findAll()
{
}

Видно что если не найдена 1 запись, то будет null, а в find чтобы не было, будет массив.
  • Вопрос задан
  • 849 просмотров
Пригласить эксперта
Ответы на вопрос 3
qonand
@qonand
Software Engineer
в подобных ситуация стоит возвращать null или Null-object в зависимости от того как реагирует Ваш код на ситуацию когда ничего не найдено. Бросать исключение в таких ситуациях - не особо уместно, все таки "не найдено" это не исключительная ситуация а вполне себе обычная... возвращать false - тоже как-то не камельфо (если есть false должен быть и true)
Ответ написан
Комментировать
solotony
@solotony
покоряю пик Балмера
а я думаю что совершенно безразлично что возвращать. главное - написать спецификацию и соблюдать еще. ну и конечно в рамках одного проекта наверно надо соблюдать единый стиль.

можно еще возвращать объект "ответ" который содержит результат - успешно/не успешно, данные ответа, код ошибки

по поводу исключений - исключения это способ "красивого" аварийного завершения работы.
Ответ написан
Комментировать
@novrm
Странно, конечно, но...
Методы репозитория должны возвращать сущность или нуль или массив сущностей или пустой массив.
На то он и репозитории.

То, что вы пишите true, false или null - должны возвращать сервисы, которые есть посредником между репозиториями и контроллерами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы