Вопрос

На языках, которые поддерживают объекты исключения (Java, C #), когда это уместно использовать Коды ошибок? Это использование кодов ошибок, когда-либо подходящих в типичных приложениях предприятия?

Многие известные программные системы используют коды ошибок (и соответствующая ссылка на код ошибки). Некоторые примеры включают операционные системы (Windows), базы данных (Oracle, DB2) и средних изделий (Weblogic, WebSphere). Какие преимущества делают коды ошибок? Каковы недостатки для использования кодов ошибок?

Это было полезно?

Решение

В ПРЕДЕЛАХ Программа, которую необходимо всегда использовать исключения вместо кодов ошибок. Однако исключения не могут распространяться за рамки программы. В любое время ошибка должна оставить программу, которую вы останетесь с сообщениями об ошибках или кодах ошибок.

Для простых вещей, которые всегда будут иметь ошибки ошибок без человеком без кодов. Вы можете сказать «Файл не найден», не давая ему код ошибки. Однако, если это может быть еще один компьютер на другом конце, то вам следует дать коды ошибок в дополнение. Вы не хотите сломать другую систему, когда вы меняете его в «файл»u003Cx> не найден".

Другие советы

Я не думаю, что когда-либо использовал коды ошибок в .NET, кроме в один Ситуация - когда я создал консольное приложение, которое я знал, собирался вызвать из другого приложения. Это другое приложение должно было знать, когда приложение консоли не удалось, а что пошло не так. Итак, один пример того, как было бы уместно, если вы знаете, что ваша программа будет вызываться другими программами, и вы хотите, чтобы они поняли ошибки.

Тем не менее, я был новичком к .NET в то время и никогда не использовал коды ошибок.

В качестве бокового примечания, как Windows Guy, приятно иметь возможность Plop в код ошибки и придуматься с помощью статьи KB, поэтому код ошибки в сочетании с хорошей документацией и способностью найти его = хорошие чувства от ваших пользователей.

Очень распространено для интерфейсов веб-сервисов. Это очень просто и стандартно, чтобы вернуть код с описанием.

Я согласен, что для большинства сценариев старая школа

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

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

Я новичок, чтобы сложить переполнение, но ...

Я считаю, что коды ошибок, как правило, используются или полезны для решения ошибочных ситуаций, которые требуют конечного пользователя, чтобы принять участие, чтобы исправить ситуацию. Если ваш код должен поддерживаться другим разработчиком, то исключения - это путь. Однако в ситуации, когда есть проблема:

  • В среду работает ваше приложение

  • С коммуникацией между вашим приложением и другим объектом (веб-сервер, база данных, сокет и т. Д.)

  • что указывает устройство или драйвер устройства (может быть, сбой аппаратуры?)

Затем коды ошибок могут иметь смысл. Например, если ваше приложение пыталось войти в базу данных от имени вашего конечного пользователя, но БД недоступен для аутентификации (DB не работает, кабель отключен), затем код ошибки / описание Combo может помочь Пользователь исправляет проблему.

Опять же, на уровне разработчика / инженера, который сможет коснуться исходного кода (традиционные методы отладки и тестирования) и изменять его, используйте исключения.

Надеюсь это поможет...

--jqpdev.

Я часто использую коды ошибок, когда необходимо предоставить ошибку, поскольку они могут быть интернационализированы. Например, в компилятере, если есть ошибки в пользовательском коде, ошибки могут быть включены в Backend компилятора, в то время как интерфейс может локализировать их в культуру / языковые строки для потребления пользователей. Enums может быть лучше для этой цели, чем необработанные целые числа.

Я также использовал их в создании Framework «Ошибка отчетов» для приложения. Когда исключения были брошены, они были брошены с кодом ошибки, который, когда исключение Bubded, был отправлен (с журналом) на центральный сервер. Код помог организовать базу данных, чтобы мы могли проверить журналы, связанные с определенной ошибкой.

Наконец, как уже упоминалось в паре других ответов, коды ошибок просты и языковые агностики для Google (думайте, что коды ошибок Windows / MS KB), поэтому код ошибки с участием Описание того, что пошло не так, может быть лучше для конечных пользователей технического продукта.

Идея кодов ошибок полезно, но IMO они принадлежат членам исключения или в качестве параметров интерфейса IERRORMEPORTER или еще более того, чем в качестве значения возврата метода.

Коды ошибок - это старая школа. Они практически не имеют значения.

Единственное возможное значение к коду ошибки состоит в том, что он может определить очень конкретное обстоятельство. Вы можете иметь код для каждой точки в базе кода, которые могут выбрасывать исключение. Это позволит вам очень точно сузить то, что должна быть проблема.

Но никто не заботится об этом уровне детализации. Кто хочет сохранить такой беспорядок. Это оставило бы вас кодами, которые означали что-то вроде «состояние A и B, но не C из-за состояния S». Это больше усилий, чем стоит попробовать выработать именно то, что это значит. След стека будет более ценным в том, чтобы рассказать вам, где в программе произошла проблема.

Я научился программировать компьютеры до того, как исключения были широко распространены методика. я так Рад, что мы получили исключения вместо этого!

C #, и, вероятно, Java тоже поддерживает лучший поток управления обработкой исключения, ключевое слово, наконец, что делает вещи немного приятнее, чем использование кодов ошибок. Объект исключения может содержать любой уровень детализации, безусловно, намного больше, чем код ошибки. Таким образом, объект исключения является более практичным, но вы можете работать в необычный случай, когда код ошибки будет более подходящим.

FWIW, C ++ также поддерживает объекты исключения. Я не думаю, что C ++ поддерживает ключевое слово C ++ (хотя новее C ++ Whatevers просто может), но в C ++ вам также нужно избегать таких вещей, как возвращение внутри обработчика уловки.

Коды ошибок были разработаны в возрасте, где единственный способ для функции, чтобы сообщить аленеруту, что что-то пошло не так, было назначить особое значение для одного или нескольких значений тех, которые можно вернуть, и очень часто только нативное целое число или очень часто Доступно для возврата этого специального значения.

Например, в C подпрограмма «Get Charach» возвращает следующее значение символа в ASCII, но возвращает отрицательное значение, если по какой-то причине что-то пошло не так. Затем вы несете ответственность за возвращение к вашему абонеру, так что эта ситуация об ошибках может быть обработана, и это необходимо вернуть и т. Д.

Механизм исключения является элегантным способом справиться с этим «Это чрезвычайная ситуация, мы должны вернуться из кода до тех пор, пока что-то не может иметь дело с проблемой». Коды ошибок уступают этому.

Я написал много веб-сервисов, которые потребляются другими (удаленными) приложениями. Когда дела плохо с помощью запроса, клиенты более или менее настаивают на том, чтобы получить код, чтобы им не приходилось делать ужасное сравнение строки, чтобы узнать, что пошло не так.

Принимайте HTTP-коды результатов как точный пример такого поведения. «200» означает счастливым, «300» могут пойти в любом случае, «400» или «500» означает начать беспокоиться.

Коды ошибок предназначены для того, чтобы вы хотите отправить их пользователю. Если нет, используйте исключение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top