【发布时间】:2010-09-06 19:03:40
【问题描述】:
嘿,我不断听到我应该始终在我的网络应用程序中使用自定义异常。问题是,当自定义异常都在 global.asax(写入数据库等)反正..那么我为什么要使用它们呢?
【问题讨论】:
嘿,我不断听到我应该始终在我的网络应用程序中使用自定义异常。问题是,当自定义异常都在 global.asax(写入数据库等)反正..那么我为什么要使用它们呢?
【问题讨论】:
我几乎从不使用自定义异常。当我手动抛出异常时,我会提供详细消息。
我发现维护异常是不值得的。
更新
让我们把它放到上下文中。问题是是否有人应该在 Web 应用程序中创建自定义异常。我将其设想为一个基本的 crud 应用程序。
网络应用程序
在 Web 应用程序中,您几乎不需要自定义异常。正在将数据写入数据库,并且正在从数据库中读取数据。然后数据被某种 UI 消耗:MVC、WPF、WebForms 等。在这样的应用程序中,没有机会出现自定义异常。每个应用程序都是不同的,所以会有例外这...
框架
框架是完全不同的动物。作为框架开发人员,您的工作是提供对发生错误的原因的可见性。我期望来自框架的详细异常,也许是自定义的,也许不是。我希望有足够的信息来解决错误。
正如@Wyatt Barnett 指出的那样,一个新的例外应该提供更多的东西,这是现有类无法做到的。
我要创建自定义异常的原因
【讨论】:
我认为创建自己的自定义异常而不是仅仅使用带有描述性错误的标准类型异常成为一个好主意的地方出现在您需要向异常添加更多数据的地方。 EG,想象一下你有一个导入例程,而不是在收到损坏的数据时抛出 InvalidOperationException,你可以抛出 ImporterException 并在所述异常中包含导入的行号和原始数据?
【讨论】:
让我们分解一下异常的使用:
当我们的例程遇到这种情况时,我们会抛出异常:
“我无法继续”
当我们的例程遇到这种情况时,我们会抛出一个特定的 BCL 异常:
“我无法继续,其中一种更具体的 BCL 异常类型描述了确切原因(即 FileNotFoundException)”
当我们的例程遇到这种情况时,我们会抛出一个自定义异常类型:
“我无法继续,因为 BCL 异常无法准确地向相关方描述”
【讨论】:
为给定的异常或问题设置适当的异常类对于将使用您正在编写的类的代码非常重要。
例如,TextWriter 的WriteLine 方法可以抛出以下异常:
ArgumentNullException
ObjectDisposedException
IOException
FormatException
想象一下你的代码,如果那个方法只抛出Exception。
【讨论】: