2011-09-09 93 views
4

捕获最佳实践我有一个WCF与以下3个层次:例外3层应用程序

  1. 服务
  2. BLL
  3. DLL。

任何人都可以请帮我上:

了上述层之一是捕捉和记录异常的以下情形的最佳场所:

方案1:

异常发生在DLL。

情景:2:

异常发生在BLL。

另外,我是否应该总是将服务上的BLL调用包装为Try和Catch?

回答

4

它取决于你的系统就在这里,但我可能会登录到BLL中的异常。并且介意你“登录”不抓住!那就是 - 在捕获结束时将重新抛出!

我不明白在服务任何东西 - 这仅仅是与客户进行沟通 - 没有必要把所有的逻辑里面恕我直言。

当然:赶上你的预计例外,他们被抛出,只是让意外的传球。

例如: 场景1 - 也许赶上SqlExceptions,尝试处理它们,如果不是将它们包装在某些DAL-Exception中并抛出它们。 方案2 - 也许赶上第3层的DAL例外,看看你是否可以处理这些或再次包裹它们,...

恕我直言,它几乎从来都不是一个好主意,处理,登录和静音各种不受欢迎的异常(catch (Exception)) - 该应用程序的状态也只是在此之后非常不确定的。

+0

谢谢@CarstenKönig。 WRAP,LOG和HANDLE有什么区别? –

+0

包装:采用多种不同产生的异常并把它们纳入一个单一的一个(如内部异常或更换) - 优点:功能调用你的BL并不需要知道所有的DAL可能会抛出异常,只是包装的异常。/ Log:只记录异常并重新抛出/ Handle:捕获异常并做一些清晰的清理 - 不要重新抛出或抛出新的异常 - 我希望这有助于 – Carsten

+0

谢谢@CarstenKönig –

3

有一个读通过一些有关MSDN上的文章的Microsoft Exception Handling Block

它经历了很多的场景,给你的异常处理策略一些好的想法,不管你是否使用异常处理块最佳做法或不是,如下图所示。

enter image description here

+0

谢谢你的好链接。 –