【问题标题】:designing exceptions for custom dll used by third party web sites为第三方网站使用的自定义 dll 设计例外
【发布时间】:2011-10-07 15:19:24
【问题描述】:

我正在设计一个类库,该类库将发送给公众,供他们的应用程序使用。它与他们需要安装在服务器上的自定义数据库系统进行交互。

我在决定如何从这个主要是自定义数据库系统的包装器的 dll 中抛出异常时遇到了麻烦。

我假设我必须创建可以指示各种类型错误的自定义异常,包括验证、数据完整性错误等。

这个 dll 最终会被面向公众的网站使用。我想通过抛出适当的异常向最终用户提供良好的反馈,以便网站可以决定是否显示它们。但我不确定是否可以预测所有用户输入错误。如果发生非异常事件,我是否只抛出带有错误消息的常规 .net 异常?

我使用了许多第三方 dll,但这些 dll 无法为您提供处理错误的清晰方法,我不想成为其中之一。

【问题讨论】:

    标签: c# asp.net exception-handling


    【解决方案1】:

    创建自定义异常的唯一原因是调用代码是否需要显式捕获它以了解您的异常与其他异常之间的区别。

    如果调用者将您的异常视为与InvalidOperationException 完全相同,那么您应该改为抛出InvalidOperationException

    Choosing the Right Type of Exception to Throw

    【讨论】:

    • 为什么你需要一个 custom 例外?投掷InvalidOperationException。调用者会因为不匹配而做一些特别的事情吗?与他们为未找到文件所做的不同?
    • 是的,当这个异常发生时(因为最终用户输入了不匹配的数据),他们应该被通知该消息,以便用户可以更正它,而不是仅仅说有问题。站点/应用程序不知道何时向用户显示消息。
    • 在这种情况下,您只需要一个自定义异常。它可能被称为DisplayThisMessageToTheUserException。我自己偶尔也需要这样的例外,并且想知道为什么微软没有添加它。您可以只使用Exception,但随后您将向用户显示所有消息。在向用户显示之前,您可能希望使消息更漂亮。
    【解决方案2】:

    您应该重新引发自定义异常,如果您的 DLL 对错误的了解比您捕获的异常中所指示的更多,如果您不知道,那么您不知道更多,只需传递它。

    明确一点,这并不意味着您不能在检测错误时抛出自己的异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      相关资源
      最近更新 更多