【问题标题】:Best Way to handle Exception in multi-tier处理多层异常的最佳方法
【发布时间】:2011-10-19 08:04:27
【问题描述】:

我有一个关于异常处理的问题。 我想这对你来说可能很容易,但对我来说,我只是不知道如何处理多层项目中的异常。

假设在我的解决方案中,我有几个项目。

我有(下)DataAccess、BizComponent、WCF、Proxy 和 Presentation(上)。

我尝试在 DataAccess 中“尝试捕获”并将异常抛出到 BizComponent,在 BizComponent 中我再次尝试“尝试捕获”并记录错误并将异常再次抛出到 WCF。

在 WCF 和代理层中,我做同样的事情。在表示层,我向最终用户展示自定义消息。

我的前辈告诉我,我只需要在 WCF 和上层开始做“try catch”。 而且我不需要在 DataAccess 和 BizComponent 中做,因为它会被困在 WCF。

我是否应该尝试在 DataAccess、BizComponent 和 抛出异常或者我应该只尝试在 WCF 中捕获并启动 扔到上层?

哪一个更好?

如果您不清楚我的问题,请告诉我。 这是我的第一个多层项目,所以让我感到困惑。 提前致谢。

【问题讨论】:

    标签: asp.net exception


    【解决方案1】:

    根据经验,只有在您打算对异常进行处理时才处理(捕获)异常。

    例如,如果您想在“上”层提供附加信息,则可以在数据层捕获数据库异常。

    我个人使用的一种方法是在业务层中捕获和记录异常,然后重新抛出相同的异常或包装异常,从而为堆栈中的更高层提供更友好的信息。这提供了一致的日志记录过程,并且不需要应用程序中的样板日志记录代码。

    如果您在多个应用程序中重用代码并需要不同的日志存储,则可以使用依赖注入来处理。

    【讨论】:

    • 我在 DataAccess 的“try catch”中什么也没做,只是捕获并将异常抛出到上层。如果我不提供任何东西给上层是不是没有必要?
    • @kevin 如果你没有在 catch 内做任何事情,那么它没有任何作用,所以省略它。如果您需要执行任何清理,请使用 try finally 而不是 try catch
    • @kevin - 我不知道您如何重新抛出异常,但(假设您抛出相同的异常)您应该使用 throw; 而不是 throw ex; 因为这将维护堆栈和您可以知道最初的异常是在哪里引发的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多