【发布时间】:2014-01-14 09:13:40
【问题描述】:
在 WinForms 或 WPF 中处理异常的最佳实践是什么。到目前为止,我还没有找到令人满意的解决方案。有人建议捕获未处理的异常事件。但我认为这不是一个好的解决方案。
问题
我有一个 3 层应用程序。持久层、业务层和ui层。我认为捕获异常的正确位置是在 ui 层中,而不是在所有三层中捕获异常。所以用户会收到一条错误消息,也许还有一种方法可以让用户“解决”问题(错误的数据输入等)。
所以问题是,用 try catch 块包围每个 ui-eventhandler(单击事件、选择更改事件等)的最佳/正确方法是什么?像这样:
private void button_MouseUp(object sender, MouseButtonEventArgs e)
{
try
{
/// ...
}
catch (Exception ex)
{
// log exception
// show error to user if necessary
}
}
我知道捕获所有异常是不好的。当然,您需要通过验证用户输入数据来防止异常。但有时会有错误;)。
想象以下情况: 用户进行了一些尚未保存的更改。然后他点击一个按钮,在按钮处理程序中是一个错误。那么显示错误信息,让用户决定何时退出应用程序,这样用户不会丢失未保存的数据不是更好吗?
【问题讨论】:
-
'Every' 超出了顶部,不建议捕获所有类型(例外)。
-
最佳实践是在导致错误时防止用户操作:例如:当没有选择任何内容并且用户单击时,您可以处理可能获得的空引用,或者您可以确保在选择某些内容之前,该按钮处于禁用状态。这种方法适用于很多情况。
-
我知道不建议捕获所有类型的异常。是的,防止错误是一种很好的做法。但是想象一下用户做了一些更改,这些更改还没有保存到数据库中。然后用户点击一个按钮。按钮处理程序有一个错误,因此应用程序崩溃。显示错误消息并让用户决定何时退出应用程序不是更好吗?使用这种方法,用户将有机会保存更改。