现在我在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{}
}
我需要很多例外(相对)来方便地从域中表达事物。
是否有任何良好做法可以创建例外的层次结构?
创作的技术细节我完全理解。良好实践的问题。
答案 0 :(得分:6)
来自 CLR的两个引号通过C#,第4版:
如果要定义异常类型层次结构,则它非常高 建议层次结构浅而宽以便创建 尽可能少的基类。原因是基类起作用 作为一种错误处理大量错误的方法,这通常是 危险。
(...)
这里也有版本化的后果。如果你定义一个新的 从现有异常类型派生的异常类型,然后是所有代码 捕获现有基类型现在将捕获您的新类型 好。在某些情况下,这可能是期望的,在某些情况下, 它可能不是所希望的。问题是它真的取决于如何 捕获基类的代码响应异常类型和 从中派生出来的类型。从未预料到新异常的代码 现在可能表现得不可预测并打开安全漏洞。此人 定义新的异常类型无法知道所有位置 捕获基本异常以及如何处理它。所以,在 实践,在这里做出明智的决定是不可能的。