处理项目中多个图层的异常

时间:2016-10-11 13:57:39

标签: c# .net design-patterns exception-handling

我正在寻找一种设计模式,它将为我提供一个很好的机制来处理跨项目的多个层抛出的异常。寻找适合这种情况的一些好的设计模式。我在.net环境中工作。提前谢谢。

2 个答案:

答案 0 :(得分:1)

我假设您使用的是n层架构。
您可能知道,每个架构都有自己的专业知识。利弊。异常处理是n层的缺点之一。

根据我的经验,您应该在顶层捕获异常,因为这是您获得有关异常的最多信息,最重要的是完整堆栈跟踪。

然而,可能有一些理由在其他层中捕获异常。但我只能想到一个:

  1. 该层可以自行处理它们。 Ex:连接失败并且 等级重新尝试了。
  2. 此外,我还会避免在多个层中记录异常,因为这不是必需的。

    然而,这是我个人的想法。您可以在这里查看更多信息和讨论:
    Exception handling in n-tier applications?

答案 1 :(得分:1)

我认为关注点是您要使用例外的目的。例如:

  1. 业务规则验证 - 如果业务规则失败,则引发异常;
  2. 运行时异常 - 连接丢失/拒绝等。
  3. 前端验证错误 - 用户数据或用户工作流程不符合某些要求等等......
  4. 致命错误 - 严重性非常高的错误必须破坏应用程序工作流程(引用空对象...)
  5. 根据这些简单的场景,您可以了解您的例外是否必须由引发它的图层处理,或者是否需要将其“冒泡”给用户。

    例如,可以通过定义一个公共ValidationErrorHandler来管理case(1),该公共ValidationErrorHandler将每个单个异常映射到日志消息/(re)action / validationReportObject等等......然后返回给用户(或者调用者)描述对象

    情况(3)和(4)可以在提升层内部管理或传播到更高层。这取决于你想要给最终用户的“如何运作”的知识。

    案例(3)没有真正的例外情况,但在这种情况下,您可以直接将异常/错误与消息映射到用户,而不涉及其他层。

    我希望这可以帮到你。也许如果您向我们提供有关您的用例的更多信息,我们可以找到更好更深入的解决方案