2011-02-03 5 views
5

Мне было интересно, что было бы лучшим способом обработки ошибок в приложении на языках программирования, таких как C++, Java, C#.Лучшая практика Обработка ошибок

Я думал о создании места для хранения номера, связанного с сообщениями об ошибках и предупреждениях.

Например:

10000 -> "Не удается прочитать файл". ... 20000 -> «Переполнение буфера». ... 80000 -> «Критические вещи».

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

Другое дело, как их хранить, как их создать?

Является ли большое общее перечисление хорошим решением? Нужно ли хранить их в базе данных? В файле?

Оно должно быть:

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

Что вы, ребята, думаете обо всем этом?

Заранее за вашими советами и советами!

ответ

6

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

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

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

В одном из моих проектов (с использованием Java) я разработал гибридный подход. У моего корневого исключения есть конструктор, который использует класс Enum. Класс Enum содержит список кодов ошибок + сообщения об ошибках по умолчанию. Что-то вроде:

public enum ErrorCodes { 

    VALIDATION_ERROR(5001, "One of the objects cannot be validated"), 
    RESOURCE_NOT_FOUND(4004, "The requested resource does not exist"), 

Корневая исключение есть и другие конструкторы, так что разработчик может переопределить сообщение по умолчанию:

public CoreException(ErrorCodes _errorCode, final String message, final Throwable cause) { 
    super(message, cause); 
    errorCode = _errorCode.getCode(); 
} 


public CoreException(ErrorCodes _errorCode, final String message) { 
    super(message); 
    errorCode = _errorCode.getCode(); 
} 

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

+0

Да, это именно то, что я искал. Я не хочу отображать только число, было бы такой болью найти соответствующую ошибку. Но я хочу показать как номер, так и понятный текст для пользователя. Таким образом, если в какой-то момент мы получим скриншот с текстом на иностранном языке, у нас все еще есть число, соответствующее ошибке! Мы действительно думаем о номере и тексте по умолчанию, как вы. Это реализовано по-другому, но идея остается прежней! Спасибо за Ваш ответ! –

0

Не делайте этого.

У нас есть лучшие инструменты, чем C и FORTRAN.

Выбросьте исключения и дайте им имена. C# и Java будут давать стеки вызовов.

C++ может рассказать вам о типе исключения (едва ли)

+2

Как насчет мониторинга производства? Коды ошибок важны при развертывании большого приложения с несколькими компонентами. Нормальная производственная среда контролирует журналы, чтобы найти определенные строки (коды ошибок, большую часть времени) и действовать на них. Кроме того, действительно ли вы хотите получить сотни классов Exception? –

Смежные вопросы