代码之家  ›  专栏  ›  技术社区  ›  Paritosh

在三层系统中向何处抛出异常

  •  1
  • Paritosh  · 技术社区  · 12 年前

    我目前有一个系统,其结构如下: 网站->WCF->数据库

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

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

    2 回复  |  直到 12 年前
        1
  •  7
  •   Yosi Dahari    12 年前

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

    无论如何,例外情况应该对最终用户来说尽可能“愉快”,而且您似乎很好地涵盖了这一部分。

    很可能 BLL层应捕获异常 ,如果实体框架代码将抛出一个(这可能会发生),并且没有“必要”一直返回WCF服务(即BLL层能够处理此异常)。

        2
  •  2
  •   Community Mohan Dere    9 年前

    几年前我也问过同样的问题。

    Place Try Catch in Business Logic or User Interface

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

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

    推荐文章