powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Исключения vs коды возвратов
25 сообщений из 406, страница 6 из 17
Исключения vs коды возвратов
    #39671373
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Хрен знает. Я вот как пользователь столкнулся с фактом. Проводить всякие тесты на локализацию проблемы желания не было.
Я к тому, что это последнее время стало общим местом, и чем дальше - тем хуже.
Тут купил новый бук с Win10 - вообще охреневаю от невменяемости диагностических сообщений.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671374
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProАлексей КЗачем их обрабатывать? Их надо логировать , по возможности где-то в одном месте. А обрабатывать, обычно, только с целью добавления диагностической информации .То есть пользователю причину знать необязательно? ))
Еще раз - такие проблемы как
а) кончилось место на диске
б) файл с таким именем уже существуетЯ как раз и написал про добавление диагностической информации. См. красный текст и пример кода.
Shocker.Proвместо выдачи какого-то сообщения для пользователя привели к введению приложения в ступор. Ну и какие логи должен смотреть рядовой пользователь?MessageBox на экране для пользователя я рассматриваю как один из вариантов логирования. Если такой подход кажется слишком необычным, то я не настаиваю, можно обозвать отображение MessageBox другим словом.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671375
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProТо есть пользователю причину знать необязательно? ))
Ты забыл или не знал что причины делятся на уровни.
Некоторые надо.
А некоторые не надо т.к. нужен только Факт.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671376
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Ты забыл или не знал что причины делятся на уровни.По моему опыту, исключения делятся на две больших категории
- внутренние ошибки программы, тогда пользователю выдается типа "что-то сломалось", "отправить проблему разработчику" и т.п.
- пользовательские, когда пользователю показывается вменяемое или относительно вменяемое сообщение "сервер недоступен (с кнопочкой "подробнее")", "ошибка записи файла (а лучше с расшифровкой)" и т.п., предполагается, что пользователь может попытаться сам исправить проблему.

К сожалению, это мало кто стал делать, в современных программах. Хотя еще лет десять назад я видел по косвенным признакам, что разрабы делали такое разделение
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671380
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Да.
Только сейчас произошла катастрофа.
Пришел веб.
А там правила другие. Большинство исключений не стало нужно выводить юзверю.
Ну, зацепило и десктоп. И операционки.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671381
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAна практике код не кишит if...else, нет шквала проверок
так как действительно мало, что можешь сделать, да и не требуется

Ну это понятно, что на практике вызовов мало, что это проблемы не вызывает.
Для наших микро-сервисов мы используем Swagger и AutoRest, который генерит
низкоуровневый API клиент, т.е. именно OperationResult. Его использовать напрямую
неудобно. Даже если вызовов мало, это требует большего контроля со стороны
разработчиков, поэтому пишутся высокоуровневые обёртки, которые во-первых
убирают прямую зависимоть от конкретного генератора, и скрывают подробности
реализации. Потребители не знают, что там, REST, SOAP или что-то ещё.

По личному опыту, так получается лучше, чище, и удобней. При ошибках бросаются
исключения, они документируются, решарпер подсказывает, что здесь может быть
ошибка, контракты работают хорошо.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671383
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProskyANA,

Хрен знает. Я вот как пользователь столкнулся с фактом. Проводить всякие тесты на локализацию проблемы желания не было.
Я к тому, что это последнее время стало общим местом, и чем дальше - тем хуже.
Тут купил новый бук с Win10 - вообще охреневаю от невменяемости диагностических сообщений.
Дак давайте обратную связь вендору. Понижайте его NPS.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671385
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAна практике код не кишит if...else, нет шквала проверок
так как действительно мало, что можешь сделать, да и не требуется

Ну это понятно, что на практике вызовов мало, что это проблемы не вызывает.
Для наших микро-сервисов мы используем Swagger и AutoRest, который генерит
низкоуровневый API клиент, т.е. именно OperationResult. Его использовать напрямую
неудобно. Даже если вызовов мало, это требует большего контроля со стороны
разработчиков, поэтому пишутся высокоуровневые обёртки, которые во-первых
убирают прямую зависимоть от конкретного генератора, и скрывают подробности
реализации. Потребители не знают, что там, REST, SOAP или что-то ещё.

По личному опыту, так получается лучше, чище, и удобней. При ошибках бросаются
исключения, они документируются, решарпер подсказывает, что здесь может быть
ошибка, контракты работают хорошо.
Так, давай разберём.

Вот отвалился микросервис, то есть к примеру operationResult.Success - false, operationResult.StatusCode - TransportFailed, operationResult.Exception - все подробности о произошедшем
И что ты будешь делать?
Кидать своё исключение, куда завернёшь operationResult.Exception?
При отвал отдельного микросервиса не должен приводить к отвалу системы в целом.
То есть надо перехватить своё же исключение и, грубо говоря, завернуть предварительно залогировав.

Не, ну можно конечно, но по мне так оверхед.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671386
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAКидать своё исключение, куда завернёшь operationResult.Exception ?Да хоть в самодельное свойство, хоть в InnerException...
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671387
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAТо есть надо перехватить своё же исключение и, грубо говоря, завернуть предварительно залогировав.Зачем? Логирование, стандартно, организовать где-нибудь на уровне системной библиотеки, используемой для коммуникации (WebAPI, WCF и т. п.).
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671388
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВот отвалился микросервис, то есть к примеру operationResult.Success - false, operationResult.StatusCode - TransportFailed, operationResult.Exception - все подробности о произошедшем
И что ты будешь делать?

Ну во-первых, высокоуровневое API, может сделать что-то исходя из того, что работает с OperationResult, может попробовать ещё раз, или использовать другое подключение или что-то ещё.

Потребитель высокоуровневого API ожидает, что операция будет выполнена точно также как любой вызов любого интерфейса в проекте. А если вызов не удался, по любым причинам, то сломаться должна вся цепочка, вплоть до прикладного кода, и где-то должно перехватиться исключение, чтобы вернуть систему в изначальное состояние, удалить какие-нибудь временные файлы, откатить транзакции и т.д. и т.п.

Для чего потребителю знать Success или не Success?

Просто я пока не понимаю, в чём профит работать с OperationResult повсеместно, а не на стыке (низкоуровневый API клиент). А также, ты предлагаешь жить теперь с двумя механизмами обработки ошибок: с исключениями и OperationResult, или уже вовсе от исключений отказываться совсем и перехватывать их везде и всегда, чтобы затолкать в свой OperationResult, привет двухтысячные, как по мне.

skyANAТо есть надо перехватить своё же исключение и, грубо говоря, завернуть предварительно залогировав.

Да, но отлавливать ты его можешь через множество вызовов с раскруткой стека, допустим, на уровне модуля, или приложения. И фильтровать исключения, какие ты можешь обработать по месту, а какие нет.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671389
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAКидать своё исключение, куда завернёшь operationResult.Exception?

Ну Inner-же..
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671393
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Только сейчас произошла катастрофа.
Пришел веб.
А там правила другие. Большинство исключений не стало нужно выводить юзверю.
Ну, зацепило и десктоп. И операционки.Правила отображения ошибки зависят не от Web или неWeb , а от аудитории, использующей программу: корпоративное ПО, ПО для народных масс и т. п.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671396
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КPetro123Только сейчас произошла катастрофа.
Пришел веб.
А там правила другие. Большинство исключений не стало нужно выводить юзверю.
Ну, зацепило и десктоп. И операционки.Правила отображения ошибки зависят не от Web или неWeb , а от аудитории, использующей программу: корпоративное ПО, ПО для народных масс и т. п.
Конечно.
Я указал ему только один аспект. Их много.
Кстати именно веб расширил указанный тобой критерий.
Раньше ПО писалось корпоративное. И ошибки райзе слались наверх к самому exe'шнику.
В веб низзззяяяя).
Поэтому про логирование я с вами согласен.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671411
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAКидать своё исключение, куда завернёшь operationResult.Exception ?Да хоть в самодельное свойство, хоть в InnerException...
Да понятно, но зачем?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671412
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAКидать своё исключение, куда завернёшь operationResult.Exception?

Ну Inner-же..
Да понятно, но зачем?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671414
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAТо есть надо перехватить своё же исключение и, грубо говоря, завернуть предварительно залогировав.Зачем? Логирование, стандартно, организовать где-нибудь на уровне системной библиотеки, используемой для коммуникации (WebAPI, WCF и т. п.).
Вот я и говорю: Зачем?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671416
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAДа понятно, но зачем?

В смысле, зачем? Давай вот такой пример. Распределённый кеш.

https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.caching.distributed.idistributedcache?view=aspnetcore-2.1

Ты считаешь, что интерфейс спроектирован не лучшим образом, и методы типа Get(String) должны возвращать OperationResult, ведь очевидно, что реализация будет скорее всего использовать сетевые API, откуда будут приходить структуры, содержащие значение, статус выполнения и прочее?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671419
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAВот отвалился микросервис, то есть к примеру operationResult.Success - false, operationResult.StatusCode - TransportFailed, operationResult.Exception - все подробности о произошедшем
И что ты будешь делать?

Ну во-первых, высокоуровневое API, может сделать что-то исходя из того, что работает с OperationResult, может попробовать ещё раз, или использовать другое подключение или что-то ещё.Хм, пишешь декораторы Circuit Breaker и Retry, при конфигурации IoC контейнера указываешь, что использовать.

hVosttПотребитель высокоуровневого API ожидает, что операция будет выполнена точно также как любой вызов любого интерфейса в проекте. А если вызов не удался, по любым причинам, то сломаться должна вся цепочка, вплоть до прикладного кода, и где-то должно перехватиться исключение, чтобы вернуть систему в изначальное состояние, удалить какие-нибудь временные файлы, откатить транзакции и т.д. и т.п.Зависит от.
Отвалился Couchbase, ну и фиг бы с ним, там кэш. Лезем напрямую в БД.
Чуть медленнее получим данные, но зато пользователи продолжают работать.

hVosttДля чего потребителю знать Success или не Success?Тупо для того, чтобы понять по какой ветке идти.
В случае с кэшем для того, чтобы понять получил ты нужные данные, или надо в БД лезть.

hVosttПросто я пока не понимаю, в чём профит работать с OperationResult повсеместно, а не на стыке (низкоуровневый API клиент). А также, ты предлагаешь жить теперь с двумя механизмами обработки ошибок: с исключениями и OperationResult, или уже вовсе от исключений отказываться совсем и перехватывать их везде и всегда, чтобы затолкать в свой OperationResult, привет двухтысячные, как по мне.Не не, я пока не предлагаю это делать повсеместно

hVosttskyANAТо есть надо перехватить своё же исключение и, грубо говоря, завернуть предварительно залогировав.

Да, но отлавливать ты его можешь через множество вызовов с раскруткой стека, допустим, на уровне модуля, или приложения. И фильтровать исключения, какие ты можешь обработать по месту, а какие нет.Опять же рассмотрим случай с кэшем.
Ну зачем мне там кидать свои исключения, чтобы потом их ловить?
С кэшем проблемы (operationResult не Success) - идём в БД.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671424
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAДа понятно, но зачем?

В смысле, зачем? Давай вот такой пример. Распределённый кеш.

https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.caching.distributed.idistributedcache?view=aspnetcore-2.1

Ты считаешь, что интерфейс спроектирован не лучшим образом, и методы типа Get(String) должны возвращать OperationResult, ведь очевидно, что реализация будет скорее всего использовать сетевые API, откуда будут приходить структуры, содержащие значение, статус выполнения и прочее?
Не, с этим всё в порядке, а вот DistributedCache.Client пусть возвращает OperationResult
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671429
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAХм, пишешь декораторы Circuit Breaker и Retry, при конфигурации IoC контейнера указываешь, что использовать.

Ну понятно, что "высокоуровневый клиент API", это декоратор. Таки в декораторах ты предлагаешь уже бросать исключения?

skyANAЧуть медленнее получим данные, но зато пользователи продолжают работать.

Верно, но это уже при декорировании.


skyANAТупо для того, чтобы понять по какой ветке идти.
В случае с кэшем для того, чтобы понять получил ты нужные данные, или надо в БД лезть.

Это при декорировании? Или потребителю службы отдать все потроха результата выполнения? :)


skyANAНе не, я пока не предлагаю это делать повсеместно

..пока??

Таки что ты имел в виду, говоря про функциональный подход в этом случае?

skyANAОпять же рассмотрим случай с кэшем.
Ну зачем мне там кидать свои исключения, чтобы потом их ловить?
С кэшем проблемы (operationResult не Success) - идём в БД.

Если ты реализуешь GetOrAdd, то потребителю не нужно будет знать вообще про то, что кеш отваливается, это зачем ему? Тем более, кеш может использовать интенсивно, а проверки результата сильно увеличивают связанность.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671430
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНе, с этим всё в порядке, а вот DistributedCache.Client пусть возвращает OperationResult

Ну дык, об этом и речь. А как иначе?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671433
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAНе, с этим всё в порядке, а вот DistributedCache.Client пусть возвращает OperationResult

Ну дык, об этом и речь. А как иначе?
О, консенсус! За это надо выпить
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671437
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttТем более, кеш может использовать интенсивно, а проверки результата сильно увеличивают связанность.
Вот этого не понял...

Связность характеризует то, насколько хорошо все методы класса или все фрагменты метода соответствуют главной цели, - иначе говоря, насколько сфокусирован класс © Макконнелл, 2010.

О чём ты?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671438
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAСвязность характеризует то, насколько хорошо все методы класса или все фрагменты метода соответствуют главной цели, - иначе говоря, насколько сфокусирован класс © Макконнелл, 2010.

Связ А нность.
...
Рейтинг: 0 / 0
25 сообщений из 406, страница 6 из 17
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Исключения vs коды возвратов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]