在3层系统中抛出异常的位置

时间:2013-10-01 19:06:44

标签: c# asp.net

我目前有一个具有以下结构的系统: 网站 - > WCF - >数据库

调用WCF部分时,调用BLL,BLL又调用实体框架以获取所需的数据并发送回网站。目前我已将我的try catch语句放在WCF服务中,因此如果在Entity Framework或BLL中发生任何错误,服务会获取它并将FaultException抛回网站。本网站不对任何异常处理,我使用ELMAH所以我只收到一封错误的电子邮件,用户被重定向到错误页面。

这是放置try catch块的好地方,还是它们应该在BLL层或网站中?我不想处理错误,只是让它们被推高,以便用户获取错误页面,然后我收到一封电子邮件,说明发生了什么。

2 个答案:

答案 0 :(得分:7)

不应将异常块仅放在特定层中。 每个层都可能发生异常情况,如果能够,每个层都可以处理。

无论如何,对最终用户来说,异常应尽可能“愉快”,而且您似乎很好地介绍了这一部分。

如果实体框架代码抛出一个(可能发生),那么 BLL层很可能会捕获异常,并且没有“需要”返回到WCF的所有方式服务(即BLL层能够处理此异常)。

答案 1 :(得分:2)

几年前我问了同样的问题。

Place Try Catch in Business Logic or User Interface

理想情况下,如果在数据库层中捕获异常,则需要抛出UI层。

换句话说,您希望在UI层中记录异常。 让UI层决定是否需要向用户显示异常消息,或者只显示一般错误消息。