C # - попытаться использовать операторы catch - PullRequest
2 голосов
/ 03 марта 2012

Это хорошая практика, чтобы обернуть каждую функцию с помощью try and catch?

Я создаю сервер на c # и пытаюсь понять, можно ли одним из способов сделать его более надежным и защищенным от сбоев, это обернуть каждую функцию в нем оператором try & catch.

Это что-то разумное сделать ??

Ответы [ 3 ]

8 голосов
/ 03 марта 2012

Это хорошая практика - оборачивать каждую функцию методом try и catch?

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

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

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

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

1 голос
/ 03 марта 2012

Два конкретных и важных примечания:

  1. Олицетворение - всегда используйте блоки try / catch / finally: если вы когда-либо используете олицетворение, вы всегда должны заключать код в try / catchБлок / finally и поместите код выхода из системы в блок finally.Причина в том, что если во время олицетворения возникает исключение, и оно «всплывает», вы все равно будете зарегистрированы как олицетворяющая личность, что представляет угрозу безопасности.- никогда не используйте блоки try / catch: блоки try / catch стоят дорого.Если ваше приложение сталкивается с препятствием, для которого исключение должно доходить до вершины, это нормально, но никогда не используйте try / catch внутри цикла для перехода к следующему элементу.Примером может служить цикл, который выполняет некоторые вычисления, и вы получаете ошибку деления на 0, если данные неверны.Вместо того, чтобы выполнять вычисление, затем перехватить исключение и продолжить цикл, просто проверьте 0 и продолжайте цикл, чтобы исключение никогда не создавалось.

0 голосов
/ 03 марта 2012

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

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