Обработка и логирование исключений под 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, вы дадите ему лучший уровень информирования.
Но вы не сделаете этого, если скроете исходную проблему.
Знание того, что происходило во внутреннем исключении, несомненно поможет вам, когда вы будете поддерживать ваше приложение.
Продолжение следует ...
Тэги:
(решение),
исключение,
сделать
Обработка и логирование исключений под Windows и в веб сервисах (часть 8)
2013-07-28 16:14:00
... %2fexception1.jpg" alt="
исключения" />
исключение, которое может ...
+ развернуть текст сохранённая копия
Продолжаю цикл переводов понравившейся мне статьи автора James Dingle про исключения.
Первый пост посвященный этой статье находится здесь.
6. Не ловите ошибки, если вы не можете добавить хотя бы какое-нибудь значение
Если вы в каждодневной жизни, не сталкиваетесь с проблемами.
Решение которых забирает намного больше, чем необходимо.
Потому что вы говорите человеку в середине (между разработчиком и пользователем).
Который не полностью осознает детали и поэтому не может вам помочь.
Кроме того, что он повторяет то, чтобы вы сказали реальному человеку в нагрузку ?
Я уверен, что все из вас уже имеют имена в голове.
try
{
OpenFile(path);
}
catch(FileNotFoundException exception)
{
throw new Exception("File was not found.");
}
Этот код не только бесполезен.
Это также скрывает оригинальное исключение, которое может содержать больше информации (например, путь к файлу).
Однако, некоторые разработчики иногда думают, что ошибка может случиться здесь или там.
И они чувствуют себя более комфортно, если они логируют это, или что-нибудь об этом.
И они забывают поинтересоваться, является ли это на самом деле полезным.
Научитесь сопротивляться этому соблазну.
Не ловите ошибки, если вы не можете добавить что-нибудь к этому.
Если FileNotFoundException значимо, не добавляйте ничего к нему.
Если вы сделаете это, то это будет назойливо и бесполезно для человека в середине (из службы поддержки).
А какой способ обработки исключений будет полезен человеку в середине ?
Мы это рассмотрим дальше, в правиле 7 (пункте 7).
Продолжение следует ...
Тэги:
(решение),
исключение,
сделать
Обработка и логирование исключений под Windows и в веб сервисах (часть 7)
2013-07-25 23:07:00
... %2fexception1.jpg" alt="
исключения" />
... James Dingle про
исключения.
Первый пост ...
+ развернуть текст сохранённая копия
Продолжаю цикл переводов понравившейся мне статьи автора James Dingle про исключения.
Первый пост посвященный этой статье находится здесь.
5. Не глотайте ! ... ошибки
try
{
ShowListOfBlogEntries();
}
catch
{
}
Некоторые разработчики думают, что плохо показывать сообщения об ошибках пользователю или службе.
И эти разработчики проповедуют политику "поймать все" или "продолжать при всех ошибках".
Это хорошо, для тех чувствительных случаев, когда вы не дарите потенциальному атакующему внутреннюю логику вашего приложения.
Но это большой миф.
Нет такого приложения, которое бы стало более стабильным и дающим больше удовлетворения пользователю, потому что оно скрывает проблемы.
Вместо этого, пользователи сервиса или фремворка будут растеряны и потеряют драгоценное время пытаясь понять, что не так.
Как пользователь, вы ненавидите иметь дело с компанией.
Которая очевидно имеет проблемы при доставке, но продолжает вести себя так, как будто вы слишком тупы, чтобы заметить.
Компания отрицает реальность или игнорирует вас, не предоставляя вам плана к спасению.
Когда вы ожидаете вашу пиццу, вы предпочтете, чтобы с вами проконтактировали, в случае если доставщик пиццы имеет проблемы при доставке.
Даже конечный пользователь, который не IT-шник, нуждается в знании что не так.
Как проблема ударит по нему. И как он может обойти проблему.
То что ваши проблемы всплыли на поверхность, это не является симптомом отсутствия профессионализма.
Это не всегда является симптомом того, что ваши кодерские или архитектурные навыки не хороши.
Это свидетельство зрелого управления ошибками.
Также как оно свидетельствует о правильной коммуникации и остальной деятельности.
Продолжение следует ...
Тэги:
(решение),
исключение,
сделать
Виталий Рымашевский: Мы по-прежнему исключены из политической жизни (видео)
2013-07-23 11:46:37
Белорусский режим создает лишь видимость улучшения политической ситуации в стране в угоду Западу. ...
+ развернуть текст сохранённая копия
Белорусский режим создает лишь видимость улучшения политической ситуации в стране в угоду Западу. Такое мнение сайту charter97.org высказал сопредседатель оргкомитета по созданию партии «Белорусский христианская демократия» (БХД), комментируя окончание сроков отбывания наказания в пяти человек, осужденных за Площадь-2010. «Несмотря на это, за решеткой остаются многие политзаключенные. Я не сомневался в том, что суд у Ирины Халип пройдет без эксцессов. Практически Лукашенко дает сигнал Западу, что какие-то символические шаги навстречу сделаны. Тем не менее, мы остаемся не реабилитирована. Это значит, что… Узнать больше »
Тэги:
video,
виталий,
жизнь,
исключенный,
политический,
попрежнему,
рымашевский.,
христианство
Обработка и логирование исключений под Windows и в веб сервисах (часть 6)
2013-07-22 02:32:00
... %2fexception1.jpg" alt="
исключения" />
Обработка
исключений означает, что приложение ...
+ развернуть текст сохранённая копия
Продолжаю цикл переводов понравившейся мне статьи автора James Dingle про исключения.
Первый пост посвященный этой статье находится здесь.
4. Обрабатывать исключение нужно на правильном уровне стека
Давайте вернемся к нашей компании по доставке пиццы.
Вы могли бы ожидать от каждого из сотрудников, что они не будут сообщять о каждой из проблем их менеджерам.
Те случаи с которыми они должны справиться, это часть их работы.
Например, мы ожидаем от менеджера локальной точки продаж того.
Что он будет слушать жалобы несчастных клиентов и реагировать соответственно.
Вы не захотите, чтобы проблема поднималась пузырем к региональному директору.
Который с одной стороны упустит контекст происходящего, и не сможет потратить достаточно своего времени на этого клиента.
Вы также не хотите, чтобы парень из доставки осуществлял коммуникацию с клиентом сам.
Потому что он не достаточно натренирован/образован для этого.
Но вы должны иметь ответ для этого клиента, или плохая репутация вашей компании обеспечена.
С другой стороны, если пиццы всегда должны быть доставлены.
А региональный директор дает локальной точке продаж слишком широкий диапазон распространения (продаж).
То проблема возможно не будет эффективно решена.
Если локальная точка продаж пытается решить проблему сама, и не поднимает ее на более высокий уровень корпорации.
Но региональный директор может сделать кое-что по этому поводу.
Тоже самое происходит и с вашим приложением.
Когда вы предполагаете обработать ошибку, делайте это.
Обработка исключений означает, что приложение будет исполнять другой код, потому что случилась ошибка.
Это может быть, например, вываливание по ошибке, повторная попытка, или ожидание пользовательского ввода.
Или вы решите, что ошибка приемлима и программа продолжится.
Но вы должны принять решение.
Если вы не знаете о том, что делать с исключением, потому что вам нехватает информации о контексте.
Вы, возможно, находитесь слишком низко в стеке, поэтому не ловите его.
Если исключение происходит в более высоком/большом процессе чем необходимо.
Это значит, возможно, вы поймали исключение слишком высоко в стеке.
try
{
UploadUserImageToWebProfile();
}
catch(NotAnImageException exception)
{
Log("Cannot upload the image to the web profile of user {0}. " +
"The web profile will show a default image instead. " +
"The source error is: {1}", userName, exception);
}
Конечно, здесь вы получаете контекст и присоединяете к нему пользователя, к которому он относится.
Давайте дадим ключи/подсказки и указатели людям, которые читают лог файл, пытаясь найти или воспроизвести проблему.
Продолжение следует ...
Тэги:
(решение),
исключение,
сделать
Страницы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16