Как и где мы пишем, попробуйте перехватить блок для обработки исключения - PullRequest
4 голосов
/ 12 марта 2010

Мы используем язык C # для разработки приложений Windows.

Наше Windows-приложение состоит из трех уровней (пользовательский интерфейс, бизнес и уровень DataAccess). В бизнес-уровне есть несколько общедоступных (бизнес) методов, с помощью которых пользовательский интерфейс взаимодействует с классами бизнес-уровня. Эти публичные методы также имеют некоторые частные методы для реализации требуемой функциональности. В слое DataAcess есть несколько методов, которые вызываются из класса бизнес-уровня.

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

Ответы [ 3 ]

3 голосов
/ 12 марта 2010

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

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

0 голосов
/ 12 марта 2010

Исключения сложны.

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

Например, у вас есть функция, которая сохраняет временные файлы. Эта функция вызывает функции, которые, например, генерируют временное имя файла, сохраняют файл и затем возвращают путь временного файла.

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

функция new_temp_file: пытаться: name = generate_temp_name () save_temp_file (имя) вернуть имя поймать ExistingNameError: return new_temp_file ()

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

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

0 голосов
/ 12 марта 2010

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

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