c#中异常层次结构的良好实践

本文关键字:异常 层次结构 | 更新日期: 2023-09-27 18:15:49

现在我在PHP后面写c#代码。

在PHP中,我根据Zend框架的建议创建了一个异常层次结构(Symfony现在使用类似的东西)。

在package(例如Order)中,我创建了Exception文件夹,在这个文件夹中(从php转换为c#):

namespace Order.Exception
{
    interface ExceptionInterface{}
    class ApplicationException : System.ApplicationException, ExceptionInterface{}
    class OrderNotFoundException : ApplicationException {}
    class SomethingHappensException : ApplicationException{}
}

我需要大量的例外(相对地)来方便地表达来自域的东西。

是否有创建异常层次结构的良好实践?

创作的技术细节我完全理解。

c#中异常层次结构的良好实践

CLR via c#, 4th Edition:

如果你想定义一个异常类型层次结构,它是高度的建议层次结构要浅而宽,以便创建尽可能少的基类。原因是基类的行为作为一种将许多错误视为一个错误的方法,这通常是危险。

(…)

这里也有版本控制的分支。如果你定义一个新的异常类型派生自现有异常类型,然后所有代码捕获现有基类型的方法现在将捕获新类型为好。在某些情况下,这可能是需要的,在某些情况下,这可能是不可取的。问题是,这真的取决于如何捕获基类的代码响应异常类型和从它派生的类型。从未预料到新异常的代码现在可能会表现得不可预测,并打开安全漏洞。的人定义新的异常类型不能知道所有的位置捕获基异常以及如何处理它。所以,在实践中,在这里不可能做出明智的决定。