Size: a a a

2020 December 30

EK

Evgeniy Kuvshinov in phpGeeks
если идентификатор прислал пользователь то он как бы есть
но ему записи вполне может не быть и это ожидаемо что данные от пользователя могут быть кривыми или устаревшими
источник

EK

Evgeniy Kuvshinov in phpGeeks
если идентификатор ты получил из бд slug
но найти запись с таким идом не можешь то это уже нарушение целостности в бд
и тут проблемы по более чем кидать исключение или ошибку

или какой то race condition

во всех этих случаях обработчик запроса должен просто отдать 404 not found
а вот что ему и как залогировать это уже отдельный вопрос
источник

V

Victooor in phpGeeks
Evgeniy Kuvshinov
ну вот не согласен насчет экзепшена при запросе статьи по слагу
это вполне предсказуемый результат что иногда могут запросить то чего нет и кидать тут экзепшен нет смысла.

экзепшен нужен там где результат мало предсказуемый
например хочешь записать в файл, а место на диске кончилось (можно сказать что предсказуеый, но каждый раз обрабатывать эту ситуацию мало хочется)
или например пишешь данные на диск и бац он из строя вышел, тоже исключение норм вариант
или ты пишешь в файл, а файл на удаленном сервере и в этот момент разрыв коннекта был и тут уже сетевое исключение
Не буду спорить, повторюсь, нельзя прям вот так говорить что всегда надо кидать эксепшен или всегда возвращать нулл. Сильно зависит от конкретного кейса и контекста. Можно делать и то и то
источник

🦔

🦔 in phpGeeks
Viktor Sakharov
Отцы, вопрос такого плана. Что должен возвращать репозиторий, если сущность не найдена? null, или Exception?
Кидать эксепшн в пыхе довольно дорого (для эксепшена собирается весь бектрейс), а юзать эксепшены для логики это все равно что юзать гоуту (возможны прыжки по стэку на несколько уровней)
источник

S

SarcasmIO in phpGeeks
Viktor Sakharov
Отцы, вопрос такого плана. Что должен возвращать репозиторий, если сущность не найдена? null, или Exception?
find может вернуть null
get не может и кидает исключение
это конвенция
источник

S

SarcasmIO in phpGeeks
так что именуя методы в репосах ты сам решаешь по неймингу что может вернуть null, а что кидаться исключениями
источник

VS

Viktor Sakharov in phpGeeks
Ну по идее тогда исключение должно выбрасываться в том случае, если БД упала, иначе реп возвращает либо объект, либо нулл, либо коллекцию объектов
источник

S

SarcasmIO in phpGeeks
ноуп
источник

AS

Alexandr Sakharoff in phpGeeks
Evgeniy Kuvshinov
если идентификатор ты получил из бд slug
но найти запись с таким идом не можешь то это уже нарушение целостности в бд
и тут проблемы по более чем кидать исключение или ошибку

или какой то race condition

во всех этих случаях обработчик запроса должен просто отдать 404 not found
а вот что ему и как залогировать это уже отдельный вопрос
Исключения бывают разного уровня, совершенно нормально кинуть исключение, поймать его выше по стеку и сделать ветвление.
Nullobject тоже кинет исключение, когда обратятся к его методам, выше по стеку.
источник

🦔

🦔 in phpGeeks
Viktor Sakharov
Ну по идее тогда исключение должно выбрасываться в том случае, если БД упала, иначе реп возвращает либо объект, либо нулл, либо коллекцию объектов
Исключение должно кидаться в тех случаях, когда логика пришла туда, куда придти не должна была
источник

V

Victooor in phpGeeks
🦔
Исключение должно кидаться в тех случаях, когда логика пришла туда, куда придти не должна была
Хорошая формулировка
источник

S

SarcasmIO in phpGeeks
Victooor
Хорошая формулировка
только она работает в вакууме и только
источник

AS

Alexandr Sakharoff in phpGeeks
🦔
Кидать эксепшн в пыхе довольно дорого (для эксепшена собирается весь бектрейс), а юзать эксепшены для логики это все равно что юзать гоуту (возможны прыжки по стэку на несколько уровней)
В чем дороговизна? Не встречал проблем с перформансом из-за здесь.
Чтобы избегать разрыва пути ошибки "goto", следует делать rethrow на каждом уровне
источник

🦔

🦔 in phpGeeks
Alexandr Sakharoff
В чем дороговизна? Не встречал проблем с перформансом из-за здесь.
Чтобы избегать разрыва пути ошибки "goto", следует делать rethrow на каждом уровне
Я там в скобках написал
источник

🦔

🦔 in phpGeeks
Да и мы тут уже делали бенчи на эту тему
источник

AS

Alexandr Sakharoff in phpGeeks
🦔
Я там в скобках написал
Так это не дорого
источник

🦔

🦔 in phpGeeks
Alexandr Sakharoff
Так это не дорого
Разница в разы
источник

V

Victooor in phpGeeks
SarcasmIO
только она работает в вакууме и только
От неё нужно отталкиваться. Запрашивают юзера, а его нет. Штатная ситуация? Нет? Зависит от кейса
источник

S

SarcasmIO in phpGeeks
Victooor
От неё нужно отталкиваться. Запрашивают юзера, а его нет. Штатная ситуация? Нет? Зависит от кейса
это ни как не относится к исходному вопросу, find может вернуть ?Object
get может вернуть Object|ObjectNotFoundException
источник

S

SarcasmIO in phpGeeks
и речь не про всякие ConnectionException/etc все что уровнем ниже, а про простой человекопонятный апи
источник