#c# #wpf #exception-handling
#c# #wpf #исключение
Вопрос:
У меня есть основное приложение WPF, настроенное следующим образом: представления, ViewModels, бизнес-объекты и Dal с SQL Compact DB. Вызовы базы данных выполняются через Linq2SQL. Приложение является однопользовательским. (по одной базе данных на пользователя).
Предполагая, что исключение возникает в Dal во время операции CRUD или пользователь удалил базу данных, где должна происходить обработка исключений.
Также, если по какой-либо причине в View / ViewModel возникает исключение, я не хочу, чтобы система вышла из строя. Как я должен с этим справиться. Должен ли я просто сообщить пользователю, что произошла ошибка, и воссоздать View / ViewModel, чтобы пользователь мог продолжить. ViewModels взаимодействуют с другими ViewModels только посредством обмена сообщениями (например, что-то нужно обновить).
Комментарии:
1. Ваш вопрос неясен, можете ли вы объяснить подробнее
Ответ №1:
самым простым ответом было бы то, что это действительно зависит от того, каковы именно требования приложений.
Подробности: Прежде всего, вы должны выполнять исключительную обработку там, где когда-либо существует вероятность исключительного случая. При выполнении операции CRUD, при выполнении чего-либо в модели представления или даже при создании представлений. Пользователю определенно не понравится сбой приложения. Итак, лучшее, что можно сделать, это обработать исключение, настроить сообщение об ошибке так, чтобы оно имело смысл для пользователя, и показать его пользователю, чтобы он знал, что произошла ошибка. Также спросите пользователя, что теперь делать (опять же, это действительно зависит от требований приложения), но, например, если файл базы данных был удален, спросите пользователя, хочет ли он создать новый или что-то в этом роде
Комментарии:
1. 1 — пользователя не волнуют особенности проблемы с доступом к данным, они просто хотят ее исправить. Фиксируйте все, что предсказуемо или предсказуемо, все остальное должно всплывать и обрабатываться на уровне приложения — убедитесь, что вы зарегистрировали его как можно ближе к исходному состоянию.
Ответ №2:
В методе OnStartup() вашего приложения WPF вы можете подписаться на приложение.Текущий.Событие исключения DispatcherUnhandledException, которое позволяет вам записать исключение, сообщить пользователю об исключении и предложить любые средства правовой защиты, если это необходимо, и отменить завершение работы приложения, установив e.Handled = true.
Отменять завершение работы вашего приложения следует только в том случае, если вы можете устранить причину исключения, в противном случае вы потенциально оставите приложение в неопределенном состоянии.
Ответ №3:
Проблемы с БД должны решаться в вашем dal, dal должен информировать кого-либо о проблеме с сообщениями / событиями.
исключения из моделей просмотра должны перехватываться внутри этих классов, если только у вас нет какой-либо mvvm-платформы, такой как caliburn, которая может обрабатывать это независимо. После обнаружения исключения сообщение должно быть отправлено в shell / view manager, который будет обрабатывать проблемы.