|
Null VS Exception
|
|||
---|---|---|---|
#18+
как правильно делать, вернуть null или выбросить исключение? например здесь Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 09:50 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
Зависит от того, плановая это ситуация или исключительная. Но много зависит и от окружения - как оно построено. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 09:56 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
listtoview, возвращать null очень плохой стиль кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 09:57 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
vb_sub возвращать null очень плохой стиль кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 09:58 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
vb_sub listtoview, возвращать null очень плохой стиль кода. Почему? например это поиск если ничего не найдено, зачем возвращать объект? логичнее вернуть ничего не? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 10:48 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
listtoview, потому что если ты ждешь из функции объект Book, и будешь возвращать null, то при обращении к book.Id у тебя в runtime вылетит ошибка. ее тяжело отловить. если еще и другие люди по проекту работают, то к проблемам такой подход приведет. можно результат операции возвращать успешно нашли или нет, или паттерном Пустой объект воспользоваться. возвращать объект Book, но в нем завести какой то признак, который обозначает что объект пустой. потом написать функцию IsEmptyObject, которая на book.IsEmptyObject() вернет true когда объект в базе найден не был ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 11:19 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
Как вариант можно использовать следующую обертку, которой пользуюсь для ответа из API, но как обертка для результата метода тоже подойдет. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 12:54 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
listtoview Почему? например это поиск если ничего не найдено, зачем возвращать объект? логичнее вернуть ничего Вот смотри. Допустим ты хочешь получить объект по id, при этом по твоей бизнес-логике объекты никогда не удаляются из этой таблицы. Таким образом, если id получен валидным путем, то он должен быть валидным и объект обязан быть найден. Если не найден, то это действительно исключение (например злой хакер ручками подменил id в запросе), ты такую ситуацию не ожидаешь. Что касается поиска - обычно поиск по каким-то критериям возвращает массив. Если поиск ничего не нашел, то он возвращает пустой массив, так что тут о null речь не идет. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 13:43 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
Может быть еще такая ситуация, что объект существует, но у пользователя на него нет прав. Тут возвращать объект нельзя, но и null возвращать некорректно. Можно наплодить и выбрасывать специфические исключения для разных ситуаций, но это не самый удобный путь, удобнее возвращать Result, в котором можно классифицировать причину. К примеру есть сообщения, которые нельзя показывать пользователю (только в логи писать или показывать админу), а есть которые для пользователя предназначены. В Result-е ты можешь сделать соответствующие поля. В общем, зависит во-многом от того, как ты строишь свою архитектуру. Все, что я сказал - не догма, но в любом случае лучше принять и придерживаться единого стиля. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 13:48 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
listtoview как правильно делать, вернуть null или выбросить исключение? например здесь Код: c# 1. 2. 3. 4.
Именно этот код должен вернуть null, а не падать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 14:04 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
Можешь еще вот этот срач почитать Исключения vs коды возвратов там немножко про другое, ну так, для погружения в вопрос ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 14:29 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
Дмитрий Мух listtoview как правильно делать, вернуть null или выбросить исключение? например здесь Код: c# 1. 2. 3. 4.
Именно этот код должен вернуть null, а не падать. Ты что, белены объелся? :) это же не SingleOrDefault Single вернет найденный элемент, если в последовательности он есть и он только 1, если его нет или он не 1 бросит исключение SingleOrDefalut вернет найденный элемент, если он только 1, если элемент не найден, то вернет null First - вернет первый найденный элемент или бросит исключение FirstOrDefault - вернет первый найденный элемент или null без исключений ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 14:36 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
Roman Mejtes Ты что, белены объелся? :) это же не SingleOrDefault Данная реализация понятно, что исключение выдаст ) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 14:42 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
И в продолжение - в данный коде действительно не стоит выбрасывать исключение, потому что это исключением смешается с возможными исключениями от БД (например транспортного уровня или блокировки), и потом придется эти исключения где-то выше разделять на причины. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 14:45 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
listtoview, если не найдено -- 404 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 17:08 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
Shocker.Pro Roman Mejtes Ты что, белены объелся? :) это же не SingleOrDefault Данная реализация понятно, что исключение выдаст ) я написал о том, как этот код должен бы себя вести на самом деле, а не как он ведёт себя сейчас ведь наверняка мало кто ожидает, что метод с сигнатурой Код: c# 1.
кинет исключения, если нет записи о книге с указанным идентификатором это примерно как ожидать, что запрос Код: sql 1.
с**а, выкинет исключение ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 18:12 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
hVostt если не найдено -- 404 если нет доступа - 403 и мы возвращаемся к Shocker.Pro ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 18:14 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
И вообще предлагаю топика ТС-а нещадно удалять, пока он не научится вопросы задавать... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 18:18 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
hVostt если не найдено -- 404 Дмитрий Мух если нет доступа - 403 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 18:26 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
Дмитрий Мух И вообще предлагаю топика ТС-а нещадно удалять, пока он не научится вопросы задавать... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 18:26 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
Shocker.Pro hVostt если не найдено -- 404 Дмитрий Мух если нет доступа - 403 1. с чего это вдруг именно репо? 2. и почему это доступ должен проверятся именно на уровне контроллера? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 18:28 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
Shocker.Pro Дмитрий Мух И вообще предлагаю топика ТС-а нещадно удалять, пока он не научится вопросы задавать... Вопрос: listtoview как правильно делать, вернуть null или выбросить исключение? например здесь Ответ: например здесь - null, например там - исключение. Вот ответь мне: ТС-а "например здесь" интересует, или вообще? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 18:32 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
Не удивлюсь, если вдруг окажется, что ТС открыл для себя поведение метода Single и из-за этого и задался вопросом. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 18:39 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
Дмитрий Мух hVostt если не найдено -- 404 если нет доступа - 403 и мы возвращаемся к Shocker.Pro Мне к этому приходится возвращаться довольно часто при интеграции со всякими легаси и поделками надмозгов. Особенно за 200 ОК, который содержит детали ошибок внутри -- просто кол в попу, и провернуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 23:48 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
Кстати, возвращаясь к теме топика, на который сослались... skyANA Всё это фигня... Следует возвращать OperationResult да и вообще писать в функциональном стиле Показало себя на реальном боевом проекте как полнейшее фуфло. Никакого профита, головняк, и почва для генерации говнокода на ровном месте. Пока в C# не будет DU, не стоит заниматься подобным извращением. Не рекомендую. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 23:57 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
hVostt Кстати, возвращаясь к теме топика, на который сослались... skyANA Всё это фигня... Следует возвращать OperationResult да и вообще писать в функциональном стиле Показало себя на реальном боевом проекте как полнейшее фуфло. Никакого профита, головняк, и почва для генерации говнокода на ровном месте. Спекуляция ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 00:27 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
Дмитрий Мух Спекуляция Не, всё правда. Делюсь так сказать самым что ни на есть боевым опытом. Опыт получен, геморрой получен, профит не получен. Всё просто. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 01:02 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
hVostt Дмитрий Мух Спекуляция Не, всё правда. Делюсь так сказать самым что ни на есть боевым опытом. Опыт получен, геморрой получен, профит не получен. Всё просто. Конкретными фактами-то не делишься, только мнением. Чистой воды спекуляция ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 09:46 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
hVostt Показало себя на реальном боевом проекте как полнейшее фуфло. А конкретней? Почему не сделать Some|None на шарпе? Может в стиле Go возвращать кортеж (Result, Exception) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 09:50 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
ЕвгенийВ Может в стиле Go возвращать кортеж (Result, Exception) ? мы вот эту штуку впилили, немного доработав, пока не в проде, правда... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 10:23 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
listtoview как правильно делать, вернуть null или выбросить исключение? например здесь Код: c# 1. 2. 3. 4.
Какое ещё исключение? Возвращай нулл ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 18:57 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
monstrU listtoview, потому что если ты ждешь из функции объект Book, и будешь возвращать null, то при обращении к book.Id у тебя в runtime вылетит ошибка. ее тяжело отловить. если еще и другие люди по проекту работают, то к проблемам такой подход приведет. можно результат операции возвращать успешно нашли или нет, или паттерном Пустой объект воспользоваться. возвращать объект Book, но в нем завести какой то признак, который обозначает что объект пустой. потом написать функцию IsEmptyObject, которая на book.IsEmptyObject() вернет true когда объект в базе найден не был Бредятина ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 18:58 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
Shocker.Pro Зависит от того, плановая это ситуация или исключительная. Но много зависит и от окружения - как оно построено. Да ни от чего это не зависит. Белгородский троль считает свои высеры остроумными ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 19:24 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
listtoview как правильно делать, вернуть null или выбросить исключение? например здесь Код: c# 1. 2. 3. 4.
Собери совещание, ты же ночальнек, а вопрос архиглубокий и очень важный ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 19:28 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
vb_sub listtoview, возвращать null очень плохой стиль кода. Нормальный стиль кода ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 19:28 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
Дмитрий Мух Shocker.Pro пропущено... Дима имел ввиду не реализацию, а подход Данная реализация понятно, что исключение выдаст ) я написал о том, как этот код должен бы себя вести на самом деле, а не как он ведёт себя сейчас ведь наверняка мало кто ожидает, что метод с сигнатурой Код: c# 1.
кинет исключения, если нет записи о книге с указанным идентификатором это примерно как ожидать, что запрос Код: sql 1. 2.
с**а, выкинет исключение +146@% ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 19:31 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
просто рука не поднимается создавать объект, когда его нет пусть даже пустой ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 10:24 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
Кто сюда ассемблерщика пустил? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 10:58 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
skyANA Конкретными фактами-то не делишься, только мнением. Чистой воды спекуляция Почему не делюсь? Весь тот топик был про эти самые факты, о которых я говорил. Меня убеждали, что я не прав. Ооокеей. Я решил, что я не прав, поизучал глубже, и применил на практике. Пол года использование в одном выделенном конкретном модуле на серьёзном большом проекте. Как итог -- полная фигня. Аргументы, которые я приводил, подтвердились. Не мной лично, это фидбек от команды. Поэтому говорить о предвзятости не приходится. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 14:24 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
ЕвгенийВ hVostt Показало себя на реальном боевом проекте как полнейшее фуфло. А конкретней? Почему не сделать Some|None на шарпе? Может в стиле Go возвращать кортеж (Result, Exception) ? Давай на самом простом и банальном примере, который легко экстраполируется. Представим набор математических операций +, -, *, / как функции, которые возвращают OperationResult. Каждая из этих операций может иметь как успех, так и ошибку. А теперь напишите код простой логики с применением этих операций. Посмотрим, как надолго вас хватит, и когда вы плюнете и пошлёте всех нахер с такими идеями :) Это правда также выглядит и в других случаях. Никакой "функциональности" в OperationResult нет, это очень сильно притянутая за уши идея, в которой нет ни смысла, ни пользы. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 14:28 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
ЕвгенийВ Почему не сделать Some|None на шарпе? В шарпе пока нет DU. Можно перейти на F# и радоваться жизни, но речь шла о C#. Конкретно для C# имеются некие костыли типа OneOf<T1, T2, T3...> и прочие, не побоюсь этого слова, убожества. Использование которых не приводит ни к чему хорошему, кроме тонны неудобоваримого, нечитаемого, плохо сопровождаемого говнокода. ЕвгенийВ Может в стиле Go возвращать кортеж (Result, Exception) ? Если хочется работать в "стиле Go", то почему бы не писать на Go? Да и стиль Go (result, error) лично я считаю плохим. Это шаг назад, высокоуровневые исключения на порядка два лучше, удобнее и безопаснее. Но кому-то нравится. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 14:33 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
hVostt Если хочется работать в "стиле Go", то почему бы не писать на Go? Да и стиль Go (result, error) лично я считаю плохим. Это шаг назад, высокоуровневые исключения на порядка два лучше, удобнее и безопаснее. Но кому-то нравится. Свят, свят, свят, упаси Господи меня от GO. Действительно дряный стиль обработки ошибок, даже в их стандартной библиотеки во многих местах обработкой ошибокой пренебрегают. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 18:28 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
hVostt Никакой "функциональности" в OperationResult нет, это очень сильно притянутая за уши идея, в которой нет ни смысла, ни пользы. Ну тут надо разграничивать, OperationResult должны возвращать только высокоуровневые операции, которые делают много работы и серьезно влияют на поток управления. Так можно спуститься до проверки результатов ассемблеровской mov 😂 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 18:31 |
|
Null VS Exception
|
|||
---|---|---|---|
#18+
ЕвгенийВ hVostt Никакой "функциональности" в OperationResult нет, это очень сильно притянутая за уши идея, в которой нет ни смысла, ни пользы. Ну тут надо разграничивать, OperationResult должны возвращать только высокоуровневые операции, которые делают много работы и серьезно влияют на поток управления. Так можно спуститься до проверки результатов ассемблеровской mov 😂 Там, где в этом есть конкретный обособленный смысл -- оно уже есть из коробки :) Например, IActionResult в ASP.NET Core. Более того, архитектурно это позволяет конвертировать экземпляр результата в HTTP ответ, с одной стороны, и тестировать контроллеры с другой. Но потом включается работа надмозгов.. А чёбы не сделать такой супер-мега-хайлевел сервис, который будет возвращать OperationResult, который мы будем мапить в IActionResult? а? А? Крутая идея? )) Полная херня это, а не крутая идея. Абсолютно бестолковое, бездарное и бессмысленное ковыряние в носу ради ковыряния в носу. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 19:10 |
|
|
start [/forum/topic.php?all=1&fid=18&tid=1354654]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
79ms |
get tp. blocked users: |
2ms |
others: | 260ms |
total: | 429ms |
0 / 0 |