|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
skyANA, tight coupling ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 10:18 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
hVosttskyANAСвязность характеризует то, насколько хорошо все методы класса или все фрагменты метода соответствуют главной цели, - иначе говоря, насколько сфокусирован класс © Макконнелл, 2010. Связ А нность. Ой, бл*, в глаза балуюсь Ты про coupling. Всё равно не понял. Тебе так, или иначе надо проверять результат, что вернулся из кэша. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 10:19 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
skyANAВсё равно не понял. Тебе так, или иначе надо проверять результат, что вернулся из кэша. Для потребителя значение либо есть в кеше, либо нет. Остальное, либо ошибка, либо какая-то скрытая обработка. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 10:44 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
hVosttskyANAВсё равно не понял. Тебе так, или иначе надо проверять результат, что вернулся из кэша. Для потребителя значение либо есть в кеше, либо нет. Остальное, либо ошибка, либо какая-то скрытая обработка. Именно. Есть в кеше - используем. Нет, ошибка, проблемы с нодой - потребитель на фиг не важно, он идёт за данными в базу. То есть если DistributedCache.Client возвращает operationResult.Success, то берём operationResult.Value и используем. Не Success - идём в базу. При этом не надо тут генерировать никаких исключений и героически их обрабатывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 17:23 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
skyANAТо есть если DistributedCache.Client возвращает operationResult.Success, то берём operationResult.Value и используем. Не Success - идём в базу. При этом не надо тут генерировать никаких исключений и героически их обрабатывать. В 1000 мест мне нужно работать с кешем и в 1000 мест я вынужден проверить Success. Но с кешем понятно, это не критичный участок, а если это распределённое файловое хранилище, например. Мне нужно получить или сохранить файл, очень много где, зачем мне этот OperationResult, мне удобно работать с файлами, как с System.IO, ошибки путь сваливают весь код, ибо он не имеет смысла без файлов, и ничего нельзя сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 09:19 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
hVosttskyANAТо есть если DistributedCache.Client возвращает operationResult.Success, то берём operationResult.Value и используем. Не Success - идём в базу. При этом не надо тут генерировать никаких исключений и героически их обрабатывать. В 1000 мест мне нужно работать с кешем и в 1000 мест я вынужден проверить Success. Но с кешем понятно, это не критичный участок, а если это распределённое файловое хранилище, например. Мне нужно получить или сохранить файл, очень много где, зачем мне этот OperationResult, мне удобно работать с файлами, как с System.IO, ошибки путь сваливают весь код, ибо он не имеет смысла без файлов, и ничего нельзя сделать.И откуда ты взял эти 1000 мест? Пишется декоратор и ты работаешь с repository, или query как обычно, просто при конфигурации IoC контроллера указываешь, что заверните-ка мне это в CacheDecorator. Работа с файлами тоже разная бывает. К примеру пользователь заливает js под видом картинки. Можно кинуть ему исключение "Нельзя, козлина!", героически его поймать и вывести "Ай, ай, ай". А можно operationResult.StatusCode = StatusCode.NotAllowed. Но сваливать весь код уж точно не стоит ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 10:22 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
skyANAИ откуда ты взял эти 1000 мест? Пишется декоратор и ты работаешь с repository, или query как обычно, просто при конфигурации IoC контроллера указываешь, что заверните-ка мне это в CacheDecorator. Ну мы уже выяснили, что таки делаем декоратор, и при ошибках бросаем исключения, если это требуется. Если компонент не влияет критически на работу приложения, то ошибки игнорируются, например, для кеша Get отдаёт всегда null, а GetOrAdd возвращает значение из переданной фабрики. skyANAРабота с файлами тоже разная бывает. К примеру пользователь заливает js под видом картинки. Можно кинуть ему исключение "Нельзя, козлина!", героически его поймать и вывести "Ай, ай, ай". А можно operationResult.StatusCode = StatusCode.NotAllowed. А вот здесь ты как раз путаешь валидацию с ошибками. Попытка внести данные, нарушающие целостность СУБД, это ошибка. При чём ошибка программиста, который не удосужился проверить данные перед тем, как их сохранять, не обеспечил условия. Здесь так же. Если же даже после валидации ошибка возникла, то это исключительная ситуация, которую не нужно пытаться свести к валидации и показывать пользователю. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 11:45 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
skyANAНо сваливать весь код уж точно не стоит Стоит, так как программист не выполнил нужные действия, значит это надо чинить. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 11:46 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
hVostt, короче бессмысленный какой-то спор Всё зависит от ситуации, архитектуры приложения и требований. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 12:23 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
skyANAhVostt, короче бессмысленный какой-то спор Всё зависит от ситуации, архитектуры приложения и требований. Ну почему. При выставлении API наружу, механизм исключений не будет работать, поэтому ты упаковываешь результат в OperationResult. Если ты проектируешь интерфейсы и классы не для внешнего API, то у тебя есть механизм исключений, которым нужно пользоваться, а не городить ещё один механизм. Как бы понятно, it depends, но ключевые тезисы никто не отменял :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 12:31 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
hVosttПри выставлении API наружу, механизм исключений не будет работать, поэтому ты упаковываешь результат в OperationResult. Если ты проектируешь интерфейсы и классы не для внешнего API, то у тебя есть механизм исключений, которым нужно пользоваться, а не городить ещё один механизм. +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 13:57 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
hVosttЕсли ты проектируешь интерфейсы и классы не для внешнего API, то у тебя есть механизм исключений, которым нужно пользоваться, а не городить ещё один механизм. Ну убедил it depends ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 14:33 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
skyANAНу убедил it depends Как раз недавно рефакторили модуль, отвечающий за исполнение DSL. Все вызовы были построены на OperationResult (да-да, мне тоже раньше это казалось офигенно крутой идеей). Переделали на исключения, речь идёт именно про ошибки. Кода стало меньше, чище, понятней и решили пару проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 22:48 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
hVosttКак раз недавно рефакторили модуль, отвечающий за исполнение DSL. Все вызовы были построены на OperationResult (да-да, мне тоже раньше это казалось офигенно крутой идеей). Переделали на исключения, речь идёт именно про ошибки. Кода стало меньше, чище, понятней и решили пару проблем. Знакомо, так часто происходит при рефакторинге, решать "пару проблем". Не сомневаюсь, OperationResult тут ни при чем)) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2018, 00:32 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
LR, :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2018, 00:37 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
Хуже, когда оказывается, что "решение" породило 4 проблемы :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2018, 00:38 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
>hVostt, вчера, 22:48 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21560717][21560717] >Как раз недавно рефакторили модуль… А почему любой модуль всегда должен что-то (код, исключение) возвращать вызывающему при ошибке? Пусть информация об ошибке иногда останется там, внутри модуля, в объекте некоего класса. По завершению вызываюший, запросив свойство, получит ссылку на объект ошибки. Если null, штатно. т.е. . . . try{модуль.метод();} catch{...} . . . или . . . модуль.метод(); if(модуль.ошибка() != null) goto ?; . . . ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2018, 01:03 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
LRЗнакомо, так часто происходит при рефакторинге, решать "пару проблем". Не сомневаюсь, OperationResult тут ни при чем)) Именно его и убирали, поэтому и привёл как пример из собственной практики. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2018, 01:13 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
hVosttИменно его и убирали, поэтому и привёл как пример из собственной практики. Понятно, смена поколений, пора мне в "наш уютный колумбарий")) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2018, 01:19 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
ВМоисеевА почему любой модуль всегда должен что-то (код, исключение) возвращать вызывающему при ошибке? Брошенное исключение гарантирует, что если потребитель специально его не отловит и как-то не обработает, то дальше код исполняться не будет. Например, читаете вы файл: var file = Some.IO.File.Read(someFilePath); А файла нет, или прав доступа к файлу нет, или во время чтения что-то сломалось. Что должно быть в file? Ничего не должно быть. Должно быть выброшено исключение. ВМоисеевПусть информация об ошибке иногда останется там, внутри модуля, в объекте некоего класса. По завершению вызываюший, запросив свойство, получит ссылку на объект ошибки. Это очень-очень, крайне плохое решение. По целому ряду причин. Вы не найдёте в популярных .NET библиотеках такого решения нигде. А если найдёте, это будет нонсенс. ВМоисеевtry{модуль.метод();} catch{...} . . . или . . . модуль.метод(); if(модуль.ошибка() != null) goto ? Состояние это всегда плохо. Состояние с ошибкой последней операции -- плохо миллион-кратно. Настолько плохо, что даже не знаю, ну это как объяснять, что пить мочу -- плохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2018, 01:22 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
LRhVosttИменно его и убирали, поэтому и привёл как пример из собственной практики. Понятно, смена поколений, пора мне в "наш уютный колумбарий")) Поколение тут совершенно не при чём. Это не что-то модное и хипстерское. Скорее наоборот. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2018, 01:23 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
hVosttПоколение тут совершенно не при чём. Это не что-то модное и хипстерское. Скорее наоборот. Не, наоборот - это ситуация, когда ничего еще не закодировано, а на кончиках пальцев разработчика уже есть оптимальное решение, то ли "Исключения vs коды возвратов" то ли наоборот (если что - я сейчас пьян) :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2018, 01:38 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
LRНе, наоборот - это ситуация, когда ничего еще не закодировано, а на кончиках пальцев разработчика уже есть оптимальное решение, то ли "Исключения vs коды возвратов" то ли наоборот (если что - я сейчас пьян) :)) У разработчика всё уже готово, осталось только код написать, а это фигня-вопрос )) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2018, 01:55 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
hVosttПри выставлении API наружу, механизм исключений не будет работать , поэтому ты упаковываешь результат в OperationResult.Зависит от протокола передачи данных. При использовании SOAP очень даже будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2018, 04:56 |
|
Исключения vs коды возвратов
|
|||
---|---|---|---|
#18+
Алексей КЗависит от протокола передачи данных. При использовании SOAP очень даже будет.да, конечно. Наверняка он говорил про рукописный протокол. Где исключения не передать. Как бы если протокол что то позволяет, то глупо не пользоваться)). ... Ну и в итоге только пара мемберов против исключений и за некий загадочный код возврата. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2018, 07:24 |
|
|
start [/forum/topic.php?fid=20&msg=39672325&tid=1399295]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
196ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 348ms |
total: | 645ms |
0 / 0 |