分层应用程序中的异常处理

时间:2010-12-17 19:03:09

标签: c# .net exception exception-handling

如果我有一个分层应用程序而我的数据层可能遇到 OptimisticConcurrencyException ,那么调用层或者下层应该如何处理这个?

调用层不知道 OptimisticConcurrencyException 是什么,所以我应该实现自定义异常并捕获 OptimisticConcurrencyException 并抛出自定义异常吗?

对此的一些指导将不胜感激。

2 个答案:

答案 0 :(得分:7)

OptimisticConcurrencyException是属于数据层的异常,因此应包含在其中。调用层不太可能处理它。

我会创建一个更通用的异常,例如DataSourceException,其中包含一些上下文,例如哪个函数失败(以及哪些参数)以及原因。我还将原始异常作为内部异常包括在内。

阅读关于捕获例外的博客文章:http://blog.gauffin.org/2010/11/do-not-catch-that-exception/

我还写了一些关于异常处理的其他条目,点击异常标记。

<强>更新

我会创建以下项目:

  • Project.Web &lt; ---通过规范接口使用服务。
  • Project.Service &lt; - 实现规范
  • 中的所有内容
  • Project.Service.Specification &lt; ---在此处放置例外(类)和定义服务的接口(如果您不使用任何服务,则放置存储库)。

答案 1 :(得分:4)

您需要从调用层的角度来看这个。该层已请求数据层执行作业。如果您的数据层可以处理OptimisticConcurrencyException并且遵守合同,那么一定要抓住它然后继续并完成工作。

但是,如果这对你要求做的工作是致命的,并且如果调用者不期望它,或者不知道它,那么你可以创建自己的异常类,catch与调用层不同的异常,而是抛出它。这是调用层可以知道的内容,并且可以很好地记录为使用此函数/ API的副作用。