2013-04-21 2 views
0

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

Сценарий 1: Я проектирую компьютерную игру, где каждый блок может перемещаться на квадрат на доске. Однако некоторые квадраты могут быть заблокированы. Должен ли я бросать исключение SquareIsBlockedException, чтобы предотвратить перемещение устройства?

Сценарий 2: Я вставляю запись в базу данных, однако она терпит неудачу, потому что там присутствует уникальный идентификатор. Он выбрасывает DuplicateIDException.

Почему я должен использовать исключения для сценария 2, но не для сценария 1?

+0

Это Java, не так ли? – leppie

+0

этот вопрос задал много раз. http://stackoverflow.com/q/77127/1515052 – Simulant

ответ

1

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

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

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

0

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

Исключения должны использоваться для ... Исключения. В Интернете есть примеры «плохого кода», где Исключения используются для управления потоком. Не делай это.

Таким образом, Ex1 звучит для меня для управления потоком, используйте управление потоками if или language.

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

Смежные вопросы