Некорректная информация от сервиса -- какой Exception?
От: 0K Ниоткуда  
Дата: 11.08.10 22:08
Оценка:
В продолжение серии вопросов по исключениям: http://rsdn.ru/forum/dotnet/3915523.flat.aspx
Автор: 0K
Дата: 12.08.10
Пишу отдельно, т.к. каждый вопрос самостоятелен.

Собственно, обращаемся к источнику данных (Web-сервис, файл или что угодно) и он возвращает некорректные данные. Допустим, ожидаем XML, получили просто текст. Или получили XML, но там нет обязательного параметра. Какое исключение при этом сгенерировать? InvalidOperationException? Или свое собственное?

Если свое, то какое? Ибо уже одно исключение связанное с этим сервисом есть: оно инкапсулирует документированные ошибки этого сервиса.
exception
Re: Некорректная информация от сервиса -- какой Exception?
От: MozgC США http://nightcoder.livejournal.com
Дата: 11.08.10 22:21
Оценка:
Я бы в первую очередь подумал о том, как будет обрабатывать данную ситуацию вызывающий код.
Вот уже есть одно свое исключение и вызывающий код делает какие-то действия в случае его возникновения. А если из источника данных будут возвращены некорретные данные, то вызывающий код будет эту ситуацию обрабатывать по-другому? Если да — то надо другое исключение. Если нет — то возможно можно использовать уже имеющееся свое исключение.
Т.е., повторюсь, надо смотреть с точки зрения вызывающего кода.
Re[2]: Некорректная информация от сервиса -- какой Exception
От: 0K Ниоткуда  
Дата: 11.08.10 22:35
Оценка:
Здравствуйте, MozgC, Вы писали:

MC>Вот уже есть одно свое исключение и вызывающий код делает какие-то действия в случае его возникновения.


Ну да. К примеру финансовый сервис. Могут быть исключения "превышен лимит" и пр.

MC>А если из источника данных будут возвращены некорретные данные, то вызывающий код будет эту ситуацию обрабатывать по-другому?


Он не сможет обработать. Это ошибка разработчиков сервиса. Только выдаст сообщение об ошибке для этой операции.

Так вот -- какое исключение сгенерировать? InvalidOperationException? Или не подходит?

MC>Если да — то надо другое исключение. Если нет — то возможно можно использовать уже имеющееся свое исключение.


Давайте для 2-х случаев:

1. Не сможет продолжать работу.
2. Обратиться к другому сервису по списку.

Во втором, наверное, возможно обойтись и без исключения. Но не удобно.
Re[3]: Некорректная информация от сервиса -- какой Exception
От: MozgC США http://nightcoder.livejournal.com
Дата: 11.08.10 23:00
Оценка: 8 (1)
Здравствуйте, 0K, Вы писали:

0K>Давайте для 2-х случаев:


0K>1. Не сможет продолжать работу.

0K>2. Обратиться к другому сервису по списку.

Скорее всего я бы выбрасывал уже имеющийся во фреймворке InvalidDataException.

0K>Во втором, наверное, возможно обойтись и без исключения. Но не удобно.


Не надо обходиться без исключения, пусть вызывающий код ловит InvalidDataException и там вы уже решайе что дальше делать (например перейти к следующему сервису).
Re[4]: Некорректная информация от сервиса -- какой Exception
От: 0K Ниоткуда  
Дата: 11.08.10 23:45
Оценка:
Здравствуйте, MozgC, Вы писали:

MC>Скорее всего я бы выбрасывал уже имеющийся во фреймворке InvalidDataException.


Как-то раньше не замечал его. А ничего что он наследуется от SystemException? Вроде как от SystemException наследуются исключения для работы самой платформы. Или в этом уже раскаялись?
Re[5]: Некорректная информация от сервиса -- какой Exception
От: MozgC США http://nightcoder.livejournal.com
Дата: 12.08.10 00:18
Оценка: 8 (1)
Здравствуйте, 0K, Вы писали:

MC>>Скорее всего я бы выбрасывал уже имеющийся во фреймворке InvalidDataException.


0K>Как-то раньше не замечал его. А ничего что он наследуется от SystemException? Вроде как от SystemException наследуются исключения для работы самой платформы. Или в этом уже раскаялись?


Нет, ничего страшного что он наследуется от SystemException. От SystemException не советуется наследовать свои исключения, но генерировать некоторые (исключения типа OutOfMemoryException, IndexOutOfRangeException, ExecutionEngineException, NullReferenceException и т.д. не нужно самому генерировать) исключения-наследники SystemException — абсолютно нормально.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.