捕获最佳实践我有一个WCF与以下3个层次:例外3层应用程序
- 服务
- BLL
- DLL。
任何人都可以请帮我上:
了上述层之一是捕捉和记录异常的以下情形的最佳场所:
方案1:
异常发生在DLL。
情景:2:
异常发生在BLL。
另外,我是否应该总是将服务上的BLL调用包装为Try和Catch?
捕获最佳实践我有一个WCF与以下3个层次:例外3层应用程序
任何人都可以请帮我上:
了上述层之一是捕捉和记录异常的以下情形的最佳场所:
方案1:
异常发生在DLL。
情景:2:
异常发生在BLL。
另外,我是否应该总是将服务上的BLL调用包装为Try和Catch?
它取决于你的系统就在这里,但我可能会登录到BLL中的异常。并且介意你“登录”不抓住!那就是 - 在捕获结束时将重新抛出!
我不明白在服务任何东西 - 这仅仅是与客户进行沟通 - 没有必要把所有的逻辑里面恕我直言。
当然:赶上你的预计例外,他们被抛出,只是让意外的传球。
例如: 场景1 - 也许赶上SqlExceptions,尝试处理它们,如果不是将它们包装在某些DAL-Exception中并抛出它们。 方案2 - 也许赶上第3层的DAL例外,看看你是否可以处理这些或再次包裹它们,...
恕我直言,它几乎从来都不是一个好主意,处理,登录和静音各种不受欢迎的异常(catch (Exception)
) - 该应用程序的状态也只是在此之后非常不确定的。
有一个读通过一些有关MSDN上的文章的Microsoft Exception Handling Block
它经历了很多的场景,给你的异常处理策略一些好的想法,不管你是否使用异常处理块最佳做法或不是,如下图所示。
谢谢你的好链接。 –
谢谢@CarstenKönig。 WRAP,LOG和HANDLE有什么区别? –
包装:采用多种不同产生的异常并把它们纳入一个单一的一个(如内部异常或更换) - 优点:功能调用你的BL并不需要知道所有的DAL可能会抛出异常,只是包装的异常。/ Log:只记录异常并重新抛出/ Handle:捕获异常并做一些清晰的清理 - 不要重新抛出或抛出新的异常 - 我希望这有助于 – Carsten
谢谢@CarstenKönig –