2015-09-23 4 views
0

Я пишу программу для обработки файлов BibTeX в HTML-код. Программа позволяет пользователю выбирать, какие поля будут обрабатываться или как форматировать выходной HTML-код.Должен ли я делать исключение в моем методе?

Файлы BibTeX являются текстовыми базами данных. Моя программа читает файлы BibTeX и записывает в удобный формат объекта и использует эти объекты для генерации HTML. Если есть синтаксическая ошибка, моя программа ловит ее.

И мой вопрос: должен ли я написать исключение (унаследованное из System.AplicationException), выбросить его, а затем уловить его в «ErrorLog», который будет видимым для пользователя?

Или, может быть, я должен написать «ErrorLog» без исключений - только на моих собственных нестандартных объектах ошибок? Какое решение будет более элегантным и совместимым с хорошей практикой в ​​программировании на C#?

+2

Этот вопрос или слишком широким или мнение, основанное. Вы найдете множество рекомендаций [здесь] (http://ericlippert.com/category/exception-handling/), [здесь] (http://www.hanselman.com/blog/GoodExceptionManagementRulesOfThumb.aspx) и [здесь ] (https://msdn.microsoft.com/en-us/library/seyhszts (v = vs.110) .aspx) – rene

+0

Я думаю, что этот вопрос, вероятно, будет закрыт для того, чтобы быть слишком открытым или основанным на мнениях. Я лично не буду генерировать исключение, если вы просто читаете значения из базы данных. Напишите в журнал ошибок наверняка, но, на мой взгляд, исключения больше для «очень плохих» вещей, которые по-разному нужно обрабатывать логикой приложения. Если вы просто говорите своему пользователю: «Эй, манекен, этот HTML-код недействителен». Я действительно не вижу смысла. Возможно, если вы анализируете HTML и отображаете его в элементе управления WebViewer. – sab669

+0

Правило большого пальца: Исключения для разработчиков, * не * пользователей. Пользователи должны получить хороший отчет, если что-то пошло не так. Разработчикам нужны факты и как можно больше технической информации, чтобы найти и исправить ошибку. – Corak

ответ

1

Это зависит от типа исключения и контекста. Как правило, (конечно, имеет свои «исключения»), вы должны справиться с этим с помощью try-catch, если ситуация исключительная, и вы не можете защитить себя от нее заранее.

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

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

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

Прочитайте эту статью от Microsoft: Best Practices for Exceptions

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