Плохо ли писать метод, который ничего не делает, кроме как генерирует исключение? - PullRequest
5 голосов
/ 05 января 2012

Название в значительной степени говорит об этом, но вот немного предыстории:

У меня есть приложение ASP.Net MVC, в котором мне нужно проверить список путей к файлам на наличие. Если какой-либо из путей не существует, возвращается ошибка.

В настоящее время у меня есть базовый контроллер, в котором реализовано событие OnException. Здесь обрабатываются любые неупорядоченные исключения, и пользователю возвращается сообщение об ошибке с сообщением об исключении.

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

Моя проблема в том, что это похоже на плохую практику. Я пишу метод, который возвращает void, и его единственной целью является создание исключения в редком случае, когда один из путей не существует, в большинстве случаев он ничего не делает. Это плохая идея?

Ответы [ 3 ]

8 голосов
/ 05 января 2012

В этом нет ничего плохого.

.NET Framework также делает это: например, CancellationToken имеет метод ThrowIfCancellationRequested, который ничего не делает, кроме throw или not throwв зависимости от некоторого условия.

Другой пример: Dispatcher '* VerifyAccess метод, который проверяет, находится ли вызывающая сторона в том же потоке, к которому предполагается получить доступ к элементу управления,и бросает если нет.

0 голосов
/ 05 января 2012

Некоторые могут сказать, что это плохая идея, но иногда нет разумной альтернативы. Если вы хотите вызвать исключение, чтобы сообщить об ошибке какому-либо вызывающему абоненту (возможно, изолированному от сборщика непрозрачным сторонним кодом), сделайте это. Последний арбитр - «это работает?»

0 голосов
/ 05 января 2012

В .net существует опция для создания нового исключения notimplementedex, так что вы можете создавать методы и реализовывать их позже. Так что это неплохая практика, плохая практика - оставлять их там при выпуске приложения в производство. Давать ошибки без причины - плохая практика.

Для TDD (разработка через тестирование) также может быть очень полезным, вы создаете метод, а затем модульное тестирование, которое завершается неудачей с исключением, и, наконец, вы реализуете метод для прохождения теста.

Кстати, он отвечал на заголовок вашего вопроса, но вы должны переименовать вопрос, потому что ваш метод что-то делает. Если он что-то делает и всегда выдает исключение, это плохая практика, исключения являются дорогостоящими, вы должны зарегистрировать ошибку и двигаться дальше, без исключения. Вам лучше использовать функцию PathExists, которая возвращает логическое значение, это лучшее решение. (даже если кто-то проголосует за меня -1 без причины ... Хехех)

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