分层体系结构中的exception处理

我们正在重构(并且当然是重新设计)我们的分层设计服务。 我们有服务操作层(BLL),网络抽象层 – >(处理网络代理),数据抽象层。 但我们对我们的exception处理策略感到有些困惑。

  1. 我们不希望从BLL向外界透露太多信息。 (从其他层到bll都很好)
  2. 我们不想用try catch堆栈来混淆代码
  3. 我们不希望在catch块中混淆exception处理代码(如日志记录,电子邮件等)

有人可以发布一些代码示例或文献指针,我们可以用它来设计我们简单的exception处理框架吗?

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

BLL本身定义了暴露的内容。 确保您显示要查看的内容。

我们不想用try catch堆栈来混淆代码

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

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

如果你的逻辑不依赖于exception处理(它不应该)并且你的代码保护自己 (这个很重要,你的应用程序应该总是爆炸无效状态而不是进一步工作。否则 – 很难理解导致什么的原因)然后,只需要一个error handling程序来包装整个应用程序就足够了,它会在必要时转储堆栈跟踪。

例如 – 在.net中,您可以使用订阅appdomain未处理的exception事件 。

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

Eric Lippert有一篇关于如何处理exception的精彩文章。 我认为这会很有用。

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

您还可以检查Enterprise Library 5.0及其exception处理应用程序块 ,它允许您开箱即用地执行基于策略的exception处理。