在这个例子中哪里最好抛出异常?

时间:2010-12-20 16:27:45

标签: c# exception-handling

在我正在编写的库中,我有一些方法只能在很少的时间内执行。当我对车辆进行建模时,其中一种(例外)方法是破解引擎,这种方法非常罕见。我应该在这种方法中抛出异常吗?这将阻止车辆使用。

我阅读了.NET设计框架指南一书,它指出只有在方法无法完成执行时才会发生异常。实际的引擎破解方法将始终完成,但是如果我的一个方法,例如启动引擎(此方法将存储引擎启动量作为累积引擎的压力的方法)被调用并导致调用破解引擎,在哪里(如果有的话)我应该抛出异常?

3 个答案:

答案 0 :(得分:4)

认为应抛出异常以突出显示代码或运行时问题。这实际上是正常的系统逻辑(在这个意义上说,破解的引擎是模型状态,而不是代码问题),所以不应抛出。

相反,应该有一些反馈机制在你正在建模的系统环境中有意义。

答案 1 :(得分:1)

如果您的系统(或子系统)设计为 测试 引擎,并且正在被破解的引擎状态是系统内的正常状态,则预期结果正常的系统处理,那也不例外。如果系统是用于生产引擎的系统,当发动机破裂时,整个系统不能再执行它;设计功能(升降箱,向前移动车辆,无论如何),然后破裂的引擎是例外。

如果整个系统是两者的某种组合,那么在作为引擎测试器的子系统内,(破解引擎是系统设计用于管理,监视,报告和诊断等的状态之一) ,它应该是一个已定义的状态,而不是一个例外,并且在系统的其余部分内它应该是一个例外......然后,在这两个子系统之间的接口中,您将需要检测破解的引擎状态,并进行转换它成为一个例外(和/或反之亦然)

答案 2 :(得分:0)

我相信你的Car模型需要有一个如此声明的变量:

bool isEngineCracked;  

然后当您拨打crackedEngine(Car car)方法时,它会返回bool

这反过来将允许您对发动机进行状态检查,看它的发动机是否正常运转。