我有一个基本的WPF应用程序设置如下: 视图,ViewModel,Business Objects和Dals,带有SQL Compact DB。 数据库调用是通过Linq2Sql进行的。 应用程序是单用户。 (每个用户一个db)。
假设在CRUD操作期间Dal内发生异常或用户删除了数据库,则应在何处进行异常处理。
此外,如果出于任何原因在View / ViewModel中引发异常,我不希望系统崩溃。我该怎么办呢我应该只是通知用户发生了错误并重新创建View / ViewModel,以便用户可以继续。 ViewModels只通过Messenging与其他ViewModels通信(例如需要刷新的东西)。
答案 0 :(得分:2)
在WPF应用程序的 OnStartup()方法中,您可以订阅 Application.Current.DispatcherUnhandledException 异常事件,该事件允许您记录异常,通知用户如果适用,建议任何补救措施,并通过设置 e.Handled = true 取消终止申请。
如果您可以解决异常原因,则应该只取消应用程序的终止,否则您可能会使应用程序处于未定义状态。
答案 1 :(得分:2)
最简单的答案是它真正取决于应用程序的具体要求。
详细信息:首先,如果有可能出现异常情况,您应该进行特殊处理。执行CRUD操作时,在视图模型中执行某些操作或甚至创建视图时。用户肯定不会喜欢应用程序崩溃。因此,最好的办法是处理异常,自定义错误消息,以便它对用户有意义并将其显示给用户,以便他/她知道发生了错误。同时询问用户现在该做什么(这实际上又取决于应用程序要求)但是例如,如果已删除数据库文件,请询问用户是否要创建新的或类似的东西
答案 2 :(得分:2)
DB问题应该在您的dal中处理,dal应该告知某人有关消息/事件的问题。
视图/视图模型中的异常应该被捕获到这个类中,除非你有一些像caliburn这样的mvvm框架,它可以独立地解决这个问题。 捕获异常后,应将消息发送到将处理问题的shell /视图管理器。