C#

时间:2015-10-02 17:46:54

标签: c# exception exception-handling

现在我在PHP之后编写C#代码。

在PHP中,我创建了一个由Zend Framework建议引导的异常层次结构(Symfony现在使用类似的东西)。

在包中(例如Order)我在这个文件夹中创建文件夹Exception(从php翻译成C#):

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

我需要很多例外(相对)来方便地从域中表达事物。

是否有任何良好做法可以创建例外的层次结构?

创作的技术细节我完全理解。良好实践的问题。

1 个答案:

答案 0 :(得分:6)

来自 CLR的两个引号通过C#,第4版

  

如果要定义异常类型层次结构,则它非常高   建议层次结构浅而宽以便创建   尽可能少的基类。原因是基类起作用   作为一种错误处理大量错误的方法,这通常是   危险。

     

(...)

     

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