Страницы

Поиск по вопросам

понедельник, 13 апреля 2020 г.

Exception handling

#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. Знаю что это действительно важный вопрос и его стоит задавать на раннем этапе проектирования.

Комментариев нет:

Отправить комментарий