2010-03-12 21 views
4

我们使用C#语言来开发Windows应用程序。我们如何以及在哪里编写try catch块来处理异常

我们的windows应用程序由三层(UI,Business和DataAccess层)组成。在业务层中,有一些公共(业务)方法通过它们与业务层类进行通信。这些公共方法也有一些私有方法来实现所需的功能。 DataAcess层中有一些方法是从业务层类调用的。

在这种情况下,我应该在哪里试试赶上? a)在业务层公共方法 b)在繁忙层私有方法 c)在DataAccess层方法 d)在调用业务方法的UI方法中。

+0

查看http://stackoverflow.com/questions/tagged?tagnames=exception-handling%2bc%23 – 2010-03-12 06:14:59

回答

-2

您应该在每个有风险的位置使用try catch块来引发需要可变的异常。

+1

-1:我不知道你是什么意思的“可变”,但你绝对不应该捕获所有例外。 – 2010-03-12 06:09:13

+0

通过mutable我的意思是 - 不影响下一个代码,不冒泡给用户。我需要一个不同的单词...... – 2010-03-12 22:32:28

3

你应该只在你期望它们时处理异常,并且想用特定的东西来做某件事。否则,国际海事组织,最好让他们冒泡层,所以你有一个完整的堆栈跟踪。即使在表示层,我也倾向于让错误冒出来(即转到友好的错误屏幕),除非它是我特别期待的例外。

有例外的一般规则是检查你的输入,以避免它们,预测你期望得到的结果,并让其他所有东西都例外并抛出错误。错误和栈跟踪是一件好事。他们让你知道什么是错的,哪里出错了。如果给定图层掩盖其错误,则几乎不可能确定哪里出错。

0

异常很难。

您应该只抓住你期望发生的那些,和你预期应该在抽象的层面,它知道它正试图完成的,而不是较低的一个,只是知道一个小的任务被抓的那些任务的一部分。

例如,您有一个保存临时文件的功能。该函数调用函数,例如,生成临时文件名,保存文件,然后返回临时文件路径。

如果文件保存功能发现您给它一个目录中已经存在的文件名,那么该函数就不应该处理它。它不知道如何命名临时文件。您调用的保存临时文件的函数应该可以处理它 - 它知道如何命名文件,并知道您可能会创建一个重复的文件。所以,你可以生成一个新的名字,然后再试一次。

功能new_temp_file: 尝试: 名= generate_temp_name() save_temp_file(名称) 回报名 抓ExistingNameError: 回报new_temp_file()

如果你发现任何比这还高,再高的水平抽象知道太多关于下层。

这只是一个简单的例子,但我希望你能得到我所说的哦 - 如此含糊地说:捕获一个异常应该被捕获的异常。