Использование класса исключений только в качестве транспортного механизма? - PullRequest
3 голосов
/ 02 марта 2011

Я не уверен, что это отличная идея, и хочу обратиться к сообществу.А как насчет использования экземпляров Exception только для передачи данных, а не для их выброса?Это для ситуации, когда мне нужно передать информацию об исключении в какой-то контейнер для регистрации или создания отчетов.Структура данных Исключения просто похожа на информацию, которую мне нужно передать в моей программе, поэтому я рассматриваю возможность ее использования.

Экземпляры исключений являются удобным средством для упаковки информации об исключительном случае, который не обязательно должен быть брошен.Например, исключительные данные должны быть возвращены в виде информации о состоянии (например, XML) в ответ на вызов веб-службы в приложение.Мне не нужно вызывать систему обработки исключений и ее ресурсы для этого.

Что хорошо, класс Exception понятен на всех уровнях приложений (в пространстве имен System), поэтому его можно использовать в качестве контейнера без ссылок в другой сборке или без создания пользовательского класса.Кроме того, исключения могут рассматриваться как обычные объекты, например, возвращаемые значения методов, и их не нужно создавать.

Кроме того, приложение может начать бросать их, если оно того пожелает.

Ответы [ 3 ]

2 голосов
/ 02 марта 2011

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

Они видят, что Exception объект создается и передается, но не выбрасывается.Это превзошло бы их ожидания.

Вы можете создать свой собственный класс на основе Exception и использовать его, но опять-таки мне это кажется немного "неуклюжим".

0 голосов
/ 02 марта 2011

Что плохого в том, чтобы бросать их, ловить, а затем регистрировать?
Вот как они должны работать.

Если вы генерируете и ловите исключения обычным способом, вы сохраните трассировку стека. Поиск ошибок в коде без следов стека - это королевская боль в заднице.

И вы не должны использовать общий Exception класс, использовать производные классы или создавать свои собственные. Я знаю, что это занимает некоторое время, но оно окупается при отслеживании проблем с кодом.

0 голосов
/ 02 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...