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

本文关键字:抛出异常 位置 系统 | 更新日期: 2023-09-27 18:33:34

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

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

这是放置 try catch 块的好地方,还是它们应该在 BLL 层或网站中? 我不想处理错误,只是让它们被推送,以便用户获得错误页面,我会收到一封包含所发生情况的电子邮件。

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

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

无论如何,例外应该尽可能"愉快"地让最终用户满意,而且您似乎很好地涵盖了这部分。

如果实体框架代码将引发异常(可能会发生),并且"不需要"一直返回到 WCF 服务(即 BLL 层能够处理此异常),则 BLL 层很可能应该捕获异常

几年前

我问过同样的问题。

在业务逻辑或用户界面中放置 Try catch

理想情况下,如果在数据库层捕获异常,则希望抛出到 UI 层。

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