Сегодня 6 мая, понедельник ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7272
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
coding4.net
coding4.net
Голосов: 1
Адрес блога: http://www.coding4.net/
Добавлен: 2012-06-11 20:16:46
 

Обработка и логирование исключений под Windows и в веб сервисах (часть 9)

2013-08-01 02:13:00 (читать в оригинале)


исключения

Продолжаю цикл переводов понравившейся мне статьи автора 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, вы дадите ему лучший уровень информирования. Но вы не сделаете этого, если скроете исходную проблему.

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

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


Тэги: (решение), исключение, сделать

 


Самый-самый блог
Блогер ЖЖ все стерпит
ЖЖ все стерпит
по сумме баллов (758) в категории «Истории»


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.