4

我很好奇何时使用操作状态以及何时出现异常。假设我有一个TextProcessor带有方法的类getText()processText()并且sendText(). 所有这些方法都对类的私有数据进行操作。我需要确保所有操作顺利进行。我有两个选择 - 每个方法都可以返回操作状态(0 - 成功,> 0 错误代码)或在方法内抛出异常。似乎异常是控制方法执行的更方便的方式,因为在返回操作状态时我需要执行以下操作:

$result = textProcessor->getText();
if ( $result !== 0 ) {
    return $result;
}

$result = textProcessor->processText();
if ( $result !== 0 ) {
    return $result;
}

$result = textProcessor->sendText();
if ( $result !== 0 ) {
    return $result;
}

或者这样

if ( textProcessor->getText() !== 0 && textProcessor->processText() !== 0 && textProcessor->sendText() !== 0 ) {
    return processingErrors::textProcessorError;
}

除了例外,这一切似乎都简单得多:

try {
    textProcessor->getText();
    textProcessor->processText();
    textProcessor->sendText();
} catch (textProcessorException $e) {
    return $e->getMessage();
}

1)那么在我的情况下哪个更好用 - 操作状态或异常?
2)一般来说,我什么时候使用操作状态(返回码),什么时候使用异常?

4

1 回答 1

1

当某些操作要求意外缺失时,最好使用异常。例如,我希望能够连接到数据库。如果我不能,那么即使在降级状态下我也无法为应用程序提供服务。我抛出一个异常,因为我无法继续。如果我可以继续,那可能是我记录但不会抛出异常的东西。

也就是说,对我来说,将它们用于控制流是完全有效的。拥有您所描述的所有返回代码似乎不是最佳选择,并且不像异常选项那样可读。当代码不可读时,它就不容易维护。

于 2013-09-19T19:03:56.183 回答