返回异常是反模式吗?
我有两个简单的方法:
public void proceedWhenError() {
Throwable exception = serviceUp();
if (exception == null) {
// do stuff
} else {
logger.debug("Exception happened, but it's alright.", exception)
// do stuff
}
}
public void doNotProceedWhenError() {
Throwable exception = serviceUp();
if (exception == null) {
// do stuff
} else {
// do stuff
throw new IllegalStateException("Oh, we cannot proceed. The service is not up.", exception)
}
}
第三种方法是私有帮助器方法:
private Throwable serviceUp() {
try {
service.connect();
return null;
catch(Exception e) {
return e;
}
}
我们和我的一位同事闲聊了聊这里使用的模式:
从 serviceUp(
) 方法返回异常
(或可抛出
)对象。
第一种意见:
使用 Exceptions 来控制工作流是一种反模式,我们只应该从 Exception 对象本身返回布尔值,而不应该返回 Exception 对象本身。论点是,使用异常来控制工作流是一种反模式。
serviceUp()
第二种意见:
没关系,因为我们需要在前两种方法中以不同的方式处理对象,并且返回异常对象还是布尔值根本不会改变工作流
你认为1)或2)是正确的,特别是,为什么?请注意,问题仅与方法及其返回类型 - vs 对象有关。serviceUp()
boolean
Exception
注意:我不是在质疑是使用可抛出对象还是异常对象。