Não há absolutamente nenhuma razão para retornar true
com sucesso, se você não retornar false
. Como deve ser o código do cliente?
if (result = tryMyAPICall()) {
// business logic
}
else {
// this will *never* happen anyways
}
Nesse caso, o chamador precisa de um bloco try-catch de qualquer maneira, mas pode escrever melhor:
try {
result = tryMyAPICall();
// business logic
// will only reach this line when no exception
// no reason to use an if-condition
} catch (SomeException se) { }
Portanto, o true
valor de retorno é completamente irrelevante para o chamador. Então, apenas mantenha o método void
.
Em geral, existem três maneiras de projetar modos de falha.
- Retornar verdadeiro / falso
- Usar
void
, lançar (marcada) exceção
- retornar um objeto de resultado intermediário .
Retorno true
/false
Isso é usado em algumas APIs mais antigas, principalmente no estilo c. As desvantagens são óbvias, você não tem idéia do que deu errado. O PHP faz isso com bastante frequência, levando a códigos como este:
if (xyz_parse($data) === FALSE)
$error = xyz_last_error();
Em contextos multithread, isso é ainda pior.
Lançar exceções (marcadas)
Essa é uma boa maneira de fazer isso. Em alguns pontos, você pode esperar falhas. Java faz isso com soquetes. A suposição básica é que uma chamada deve ser bem-sucedida, mas todos sabem que certas operações podem falhar. Conexões de soquete estão entre elas. Portanto, o chamador é forçado a lidar com a falha. é um design agradável, porque garante que o chamador realmente lide com a falha e oferece ao chamador uma maneira elegante de lidar com a falha.
Retornar objeto de resultado
Essa é outra ótima maneira de lidar com isso. É frequentemente usado para analisar ou simplesmente coisas que precisam ser validadas.
ValidationResult result = parser.validate(data);
if (result.isValid())
// business logic
else
error = result.getvalidationError();
Lógica limpa e agradável para o chamador também.
Há um pouco de debate sobre quando usar o segundo caso e quando usar o terceiro. Algumas pessoas acreditam que as exceções devem ser excepcionais e que você não deve projetar com a possibilidade de exceções em mente, e sempre usará as terceiras opções. Essa multa. Como verificamos exceções em Java, não vejo razão para não usá-las. Uso expetions verificadas quando a suposição básica é que a chamada deve ser bem- sucedida (como usar um soquete), mas a falha é possível e uso a terceira opção quando não está claro se a chamada deve ser bem-sucedida (como validar dados). Mas existem opiniões diferentes sobre isso.
No seu caso, eu usaria void
+ Exception
. Você espera que o upload do arquivo seja bem-sucedido e, quando isso não acontecer, será excepcional. Mas o chamador é forçado a lidar com esse modo de falha e você pode retornar uma exceção que descreva corretamente que tipo de erro ocorreu.