2013-03-28 38 views
3

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

我们没有跨越所有图层的try catch块。它仅存在于UI层。我们有一个异常管理类,它接受所有异常并从中返回一个友好的字符串。 UI层中的每个catch块都会调用此异常管理类,并向其传递一个System.Exception类型的异常,该异常的方法需要返回用于UI的友好错误字符串。

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

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

+1

IMO,这是一个很好的方法。资源文件或数据库表,简而言之,您有一个占位符,您可以在其中映射错误代码,也可以在您的自定义友好消息中使用技术错误消息。对于未映射的消息,您可以为用户提供一个通用友好的消息。 – 2013-03-28 05:43:11

回答

1

这就是为什么你有trycatch来捕捉例外。只是使用它与特定的错误类型,而不是通用的错误类型。那么你可以在catch块中显示任何消息。但不建议在catch块内重新抛出自定义异常。在你的情况下,你可以赶上System.Net.Mail.SmtpException

+0

我们有一个异常管理类,它接受所有异常并从中返回一个友好的字符串。每个catch块都会调用此异常管理类,该类的方法返回用于UI的友好错误字符串。 – user20358 2013-03-28 08:27:23

+1

不要让异常管理类的友好信息取决于异常text.indic尽量使用异常类型。 – 2013-03-28 08:40:52

0

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

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

相关问题