У меня есть два простых метода:
public void proceedWhenError() {
Throwable exception = serviceUp();
if (exception == null) {
// do stuff
} else {
logger.debug("Exception happened, but it 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;
}
}
Мы поговорили с моим коллегой по поводу используемой здесь схемы:
возвращая объект Exception
(или Throwable
) из serviceUp()
.
Первое мнение:
Анти-шаблон использует Исключения для управления рабочим процессом, и мы должны возвращать только boolean из
serviceUp()
и никогда неserviceUp()
объектом Exception. Аргументом является то, что использование исключений для управления рабочим процессом является анти-шаблоном.
Второе мнение:
Это хорошо, так как нам нужно иметь дело с объектом впоследствии в двух первых методах по-разному и независимо от того, не возвращает ли возвращаемый объект Exception или boolean рабочий процесс вообще
Считаете ли вы, что 1) или 2) является правильным и особенно, почему? Обратите внимание, что вопрос ТОЛЬКО о методе serviceUp()
и его возвращаемом типе - boolean
vs Exception
object.
Примечание. Я не задаюсь вопросом, следует ли использовать объекты Throwable или Exception.