3

我想知道是否有一种好方法可以将系统生成的错误转换为对用户更有意义的东西。例如,如果由于某种原因应用程序无法连接到 SMTP 服务器。我想将系统抛出的消息(类似于“SMTP 连接失败”)转换为“我们无法向您发送电子邮件”。我想从资源文件中提取这条友好消息。虽然这是一个此类例外的示例,但可能还有更多。

我们没有尝试在所有层中捕获块。它仅存在于 UI 层中。我们有一个异常管理类,它接受所有异常并从中返回一个友好的字符串。UI 层中的每个 catch 块都会调用此异常管理类,并将 System.Exception 类型的异常传递给它,该异常的方法需要返回所述友好错误字符串以在 UI 上使用。

我现在能想到的唯一方法是在异常管理类中设置一个大的 IF ELSE 块,用于检查接收到的异常字符串并从资源文件中提取匹配的友好消息。

有没有更好的方法来解决这个问题?

4

2 回答 2

1

这就是为什么你必须try catch捕获异常。只需将其与特定错误类型一起使用,而不是通用错误类型。这样您就可以在catch块内显示任何消息。catch但不建议在块内重新抛出自定义异常。在你的情况下,你可以赶上System.Net.Mail.SmtpException

于 2013-03-28T05:44:04.880 回答
0

我认为您不能将异常映射到用户友好的错误。原因是异常是“发生了什么”,在相当低的级别上,而用户只想知道“为什么”发生了以及他们可以做些什么来修复它。映射FileNotFound到“系统试图访问不存在的文件”将无济于事。相反,捕获 aFileNotFound然后,根据应用程序的状态,显示相关消息 - 将。

另一个想法是为每个可能失败的进程提供不同的错误消息,并为该过程中抛出的任何异常显示该错误消息。如果您细化您的流程和尝试捕获,您将能够为用户提供比将系统错误消息映射到用户可理解的错误消息更好的通知系统。

于 2013-03-28T08:38:52.877 回答