#c_sharp #sql_server
Есть программа для работы с базой данных на локальном компьютере. Есть проект Data access layer`а и клиентского приложения. В данном клиентском приложении я ловлю исключения прямо в обработчику нажатия кнопки, при вызове методов из DAL. Правильно ли так делать? Если нет, то как и где правильно это делать? Какие есть правило хорошего тона ловли исключений? Покидайте хорошие статьи если есть таковы. Заранее благодарен за помощь. UPD------ Кстати, в MVC исключения, связанные с некорректными входящими данными, допустим, на текстбокс, правильно ловить во View?
Ответы
Ответ 1
Общие советы: Вынесите логику (в том числе обработку исключений) из обработчиков событий в отдельные методы, в обработчике оставьте только вызов метода (Разделение UI и логики, повторное использование кода). Не перехватывайте все исключения. Обычно всё, что мы можем сделать с неизвестным исключением - записать его в лог. Поэтому вместо перехвата исключений в каждом методе, лучше сделать общий обработчик, например, так Application.ThreadException - событие (для WinForms) Обработайте ожидаемые исключения. Например, при соединении с базой вполне возможно, что SQL Server недоступен. Отличная статья на CodeProject по обработке исключений (на английском).Ответ 2
Ловить обрабатывать исключения нужно на том же уровне абстракции, где оно происходит. С другой стороны, если нужно пробросить исключение выше, то ему нужно изменить уровень абстракции и сделать более общим, а потом сделать исходное как inner. В вашем случае получается что уровень представления работает с исключениями с уровня данных. Например, подход MVC для этого делает контроллеры, которые отвечают за правильное обеспечение данных представлению. В свою очередь, у моделей делают специальные сервисы, а это сервисы уже взаимодействуют с хранилищем. Так вот доступ к хранилищу происходит через общий интерфейс, который декларирует какие исключения могут происходить. Как только они происходят, контроллер ловит их и упаковывает в исключения на своем уровне абстракции. По поводу статей не подскажу, но вообще это изучается в курсах Software Design, handling exceptions. Знаю что это действительно важный вопрос и его стоит задавать на раннем этапе проектирования.
Комментариев нет:
Отправить комментарий