分层体系结构中的异常处理

时间:2011-04-24 17:58:01

标签: c# .net architecture exception-handling

我们在分层设计中重构(并且当然是重新设计)我们的服务。 我们有服务运营层(BLL),网络抽象层 - > (处理网络代理),数据抽象层。 但我们对我们的异常处理策略感到有些困惑。

  1. 我们不希望从BLL向外界透露太多信息。 (从其他层到bll都没问题)
  2. 我们不想用try catch stacks来混淆代码
  3. 我们不想在catch块中混淆异常处理代码(如日志记录,电子邮件等)
  4. 有人可以发布一些我们可以用来设计简单异常处理框架的代码示例或文献指针吗?

3 个答案:

答案 0 :(得分:3)

  

我们不希望从BLL向外界透露太多信息   (从其他层到bll都没问题)

BLL本身定义了暴露的内容。确保你展示了想要看到的东西。

  

我们不想使用try catch stacks来混淆代码

然后不要。例外是例外。不要使用它们控制流量。让他们爆炸。

  

我们不想在catch块中混淆异常处理代码(如日志记录,电子邮件等)

如果您的逻辑不依赖于异常处理(它不应该)和您的code guards itself(这个很重要,那么您的应用程序总是会爆炸无效状态而不是工作否则 - 很难理解是什么导致了什么),然后只需要一个错误处理程序来包装整个应用程序,并在必要时转储堆栈跟踪。

E.g。 - 在.net中,您可以使用订阅appdomain unhandled exception event

我个人使用ELMAH作为我的网络应用程序 - app.config中的几行,我有很好的错误日志,存储在sqlite中,可以从Web应用程序本身轻松访问。那就是我得到的所有错误处理。

答案 1 :(得分:2)

答案 2 :(得分:1)

异常处理可能会像您想要的那样复杂,但好的方法是使用一些全局定义。例如,您可以使用任何AOP框架构建的方面 - 大多数IoC容器的一部分,如Unity,Windsor Castle,Spring.NET。另外一类AOP框架是PostSharp,它增加了运行时编译时间的各个方面。

您还可以查看Enterprise Library 5.0及其Exception handling application block,它允许您开箱即用地执行基于策略的异常处理。