Лучшие практики для определения Ваших собственных классов исключений?

Удалось найти решение. Я установил это в событии Global.asax Application_Start (), чтобы перезаписать настройки в файлах конфигурации.

var appSettings = ConfigurationManager.AppSettings;
var config = ImageProcessorConfiguration.Instance;

var cachedStorageAccount = appSettings["CachedStorageAccount"];
if (!string.IsNullOrEmpty(cachedStorageAccount))
{
    config.ImageCacheSettings["CachedStorageAccount"] = cachedStorageAccount;
}
33
задан Frank 27 March 2009 в 04:10
поделиться

5 ответов

Да, это - хорошая практика для наследования std::runtime_error или другие стандартные классы исключений как std::logic_error, std::invalid_argument и так далее, в зависимости от которого вида исключения это.

Если все исключения наследовали некоторый путь от std::exception легко зафиксировать все распространенные ошибки a catch(const std::exception &e) {...}. Если у Вас есть несколько независимых иерархий, это становится более сложным. Получение из специализированных классов исключений заставляет эти исключения содержать больше информации, но насколько полезный это действительно, зависит от того, как Вы делаете свою обработку исключений.

26
ответ дан 27 November 2019 в 18:39
поделиться

Я не разработчик C++, но одна вещь, которую мы сделали в нашем коде C#, была, создают исключение базового класса для нашей платформы и затем регистрируют исключение, добавленное конструктор:

  public FrameworkException(string message, Exception innerException)
      : base(message, innerException)
  {
      log.Error(message, innerException);
  }

  ...

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

6
ответ дан 27 November 2019 в 18:39
поделиться

Это - польза, когда исключение помещается в некоторый объем. Например, класс Управление может объявить внутреннюю Ошибку классов исключений.

и поймайте их как

catch ( const Manipulation::InputError& error )
catch ( const Manipulation::CalculationError& error )

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

3
ответ дан 27 November 2019 в 18:39
поделиться

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

  1. Наличие класса исключений называет быть полезным и ясным.
  2. Очевидно документирование (пишущий комментарии), когда исключение будет выдано функциональным или методом класса. Это - единственное самое большое место ошибки в обработке исключений, по-моему.
1
ответ дан 27 November 2019 в 18:39
поделиться

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

1
ответ дан 27 November 2019 в 18:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: