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

Поиск

Категории

Облако тегов

  << Предыдущий пост       Следующий пост >>  
От: inbruk
17. июля 2013 13:33

исключения

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

2. Документируйте ваше исключение: действие, объект, что ожидалось на самом деле, результат

Теперь вы знаете, как вы должны возбуждать исключение. Давайте этим займемся. И давайте мы сделаем это правильно. Даже если ваш парень развозящий пиццу не может справиться с ситуацией, вы должны также как и он сделать несколько уточнений. Уточнений о том, что же не так с его мотоциклом. Как много одиноких парней (не в смысле секса, но в смысле текущей ситуации) из IT техподдержки получали сообщения типа "мой компьютер не работает". Которые посылал им пользователь в надежде на немедленное разрешение ситуации ?

Сравните предложенную ситуацию со следующим.

// Exception #1: "I have a problem"
if( header.FileFormat != "JPEG" ) throw new NotAnImageException();

// Exception #2: "I have a problem with X"
if( header.FileFormat != "JPEG" )
{
string error = string.Format("Cannot compute the image dimensions " +
"of file {0}.", path)
throw new NotAnImageException(error);
}

// Exception #3: "I have a problem with X, I got Z."
if( header.FileFormat != ”JPEG” )
{
string error = string.Format("Cannot compute the image dimensions " +
"of file {0}: the format {1} is not a recognized image.",
path, header.Format);
throw new NotAnImageException(error);
}

// Exception #4: "I have a problem with X, I was expecting Y and I got Z."
if( header.FileFormat != "JPEG" )
{
string error = string.Format("Cannot compute the image dimensions " +
"of file {0}: the format {1} is not a recognized image. Ensure " +
"the image is in Jpeg format.",
path, header.Format);
throw new NotAnImageException(error);
}

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

Постарайтесь описать так много, насколько вы сможете:

- Какое дайствие привело к фиаско ? Что вам не удалось сделать ?
- Какой объект пытался совершить сие деяние ?
- Что вы наивно ожидали получить ?
- Что вы обнаружили на самом деле вместо ожидаемого ?

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

public class NotAnImageException : Exception
{
public string ImagePath { get; set; }
public string ActualImageFormat { get; set; }
// ...
}

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

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


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

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

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

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




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


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