Ловля исключений как ожидаемое управление потоком выполнения программы?

11
задан Grank 25 September 2008 в 17:25
поделиться

7 ответов

Ничего себе,

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

Короткий ответ - "да", но он может зависеть.

  • У нас есть некоторые приложения, где у нас есть большая бизнес-логика, занятая в SQL-запросах (не мой дизайн губернатор!). Если это - то, как это структурировано, в управлении может быть трудно убедить иначе начиная с него, "уже работает".
  • В этой ситуации это действительно раздувает проблему? Так как это - все еще одно прохождение через провод и назад. Сервер делает много, прежде чем он поймет, что не может продолжиться (i.e.if существует последовательность транзакций, которые происходят к Вашему действию, он затем запинается за половину и падает пути через, напрасно тратя время?).
  • Имеет смысл делать регистрацию UI сначала? Это помогает с Вашим приложением? Если это обеспечивает более хороший пользовательский опыт? (т.е. Я видел случаи, куда Вы ступаете через несколько шагов в мастер, он запускается, затем падает, когда он имел всю информацию, он должен был упасть после шага 1).
  • Действительно ли параллелизм является проблемой? Действительно ли возможно, что запись может удаляться/редактироваться или безотносительно прежде чем Ваша фиксация произойдет (как в классике File.Exists ляп).

По-моему:

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

Я знаю, что существует согласие, что исключения не должны использоваться для кроме исключительных обстоятельств, но помнить, мы пересекаем границы приложения здесь, ничего не ожидаем. Как я сказал, это похоже File.Exists, нет никакого смысла, это может быть удалено перед доступом к нему так или иначе.

4
ответ дан 3 December 2019 в 06:23
поделиться

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

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

То, что Вы не должны делать, поймать и подавить исключения с общим всеобъемлющим оператором. Выполнение мелкомодульной обработки исключений состоит конкретно в том, почему исключения были разработаны во-первых.

7
ответ дан 3 December 2019 в 06:23
поделиться

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

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

2
ответ дан 3 December 2019 в 06:23
поделиться

Нет ничего неправильно с тем, что Вы делаете. Исключения не являются nessesarily "исключительными". Они существуют, чтобы позволить вызывающим объектам иметь мелкомодульную обработку ошибок в зависимости от своих потребностей.

1
ответ дан 3 December 2019 в 06:23
поделиться

Деликатный вопрос. Однако я нахожу ответы... страшными!
Исключением является своего рода GOTO.
Мне не нравится использовать исключения таким образом, потому что это приводит к запутанному коду.
Простой как это.

2
ответ дан 3 December 2019 в 06:23
поделиться

Я рекомендовал бы назвать хранимую процедуру, которая проверяет, существуют ли какие-либо зависимости, то удаляет, если нет никого. Тем путем проверка на целостность сделана.

Конечно, Вы, вероятно, хотели бы другую хранимую процедуру для одиночного элемента, удаляет по сравнению с пакетным удалением... Пакет удаляет, мог искать дочерние строки и возвратить назад ряд записей, которые не имели право на объем, удаляют (имел дочерние строки).

1
ответ дан 3 December 2019 в 06:23
поделиться

Ловля определенного SqlException является правильным поступком. Это - механизм, которым SQL Server передает условие внешнего ключа. Даже если Вы могли бы одобрить другое использование механизма исключения, это - то, как SQL Server делает это.

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

1
ответ дан 3 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: