ГЛАВНАЯ     АРХИВ     НАПИСАТЬ АДМИНУ     ПОДПИСАТЬСЯ НА RSS     ВОЙТИ      

Поиск

Категории

Облако тегов

  << Предыдущий пост       Следующий пост >>  
От: inbruk
1. августа 2013 02:13

исключения

Продолжаю цикл переводов понравившейся мне статьи автора James Dingle про исключения. Первый пост посвященный этой статье находится здесь.

7. Оборачивайте нижележащее исключение, но не нарушайте оригинальный стек

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

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

Для этих целей, иногда интереснее перевести исключение. Если оригинальное исключение не будет значимым при показе его вызвавшему. Но кто-то всегда захочет посмотреть на исходную (первичную) проблему. И для этого .NET предлагает инкапсуляцию исключений. Оригинальное исключение остается доступным через свойство InnerException.

public string ReadAccount(string accountName)
{
  try
  {
    var file = File.OpenRead(accountName + ".txt");
    return file.ReadToEnd();
  }   catch(FileNotFoundException exception)
  {
    throw new UserNotFoundException("The account " + accountName +
    " does not exist.",
    exception); // Embed the original FileNotFoundException
    //so the issue can be debugged
  }
}


В этом случае, вызвавший ReadAccount() хотел получить доступ к аккаунту. Вызывающий не знает, как вы выбрали реализовать управление аккаунтом. например через работу с файловой системой. Или вы могли использовать для управления аккаунтом базу данных. Он возможно будет сбит с толку сырым FileNotFoundException. Выбрасывая UserNotFoundException, вы дадите ему лучший уровень информирования. Но вы не сделаете этого, если скроете исходную проблему.

Знание того, что происходило во внутреннем исключении, несомненно поможет вам, когда вы будете поддерживать ваше приложение.

Продолжение следует ...

Похожие записи


Обработка и логирование исключений под Windows и в веб сервисах (часть 10)
Продолжаю цикл переводов понравившейся мне статьи автора James Dingle про исключения. Первый пост посвященный этой статье находится здесь. 8. Обрушивайтесь правильно В соответствии с правилом " 5 - Не проглатывать исключений ", некоторые разработчики предполагают, что их приложение должно быть всегда работающим. Таким образом они дум...

Обработка и логирование исключений под Windows и в веб сервисах (часть 2)
Продолжаю цикл переводов понравившейся мне статьи автора James Dingle про исключения. Первый пост посвященный этой статье находится здесь. Почему я должен писать эффективные журналы исключений ? Написание эффективной системы перехвата и логирования исключений это не самая сексуальная (приятная, красивая) часть вашего приложения или службы. Хорошее и...

Обработка и логирование исключений под Windows и в веб сервисах (часть 6)
Продолжаю цикл переводов понравившейся мне статьи автора James Dingle про исключения. Первый пост посвященный этой статье находится здесь. 4. Обрабатывать исключение нужно на правильном уровне стека Давайте вернемся к нашей компании по доставке пиццы. Вы могли бы ожидать от каждого из сотрудников, что они не будут сообщять о каждой из проблем их...

Добавить комментарий




biuquote
  • Комментарий
  • Предпросмотр
Loading


  Сохранить комментарий