Eu tenho um método de interface que afirma na documentação que lançará um tipo específico de exceção. Uma implementação desse método usa algo que gera uma exceção. A exceção interna é capturada e a exceção declarada pelo contrato de interface é lançada. Aqui está um pequeno exemplo de código para melhor explicar. Está escrito em PHP, mas é bastante simples de seguir.
// in the interface
/**
* @return This method returns a doohickey to use when you need to foo
* @throws DoohickeyDisasterException
*/
public function getThatDoohickey();
// in the implementation
public function getThatDoohickey() {
try {
$SomethingInTheClass->doSomethingThatThrowsAnException();
} catch (Exception $Exc) {
throw new DoohickeyDisasterException('Message about doohickey failure');
}
// other code may return the doohickey
}
Estou usando esse método na tentativa de impedir que a abstração vaze.
Minhas perguntas são: Passar a exceção interna lançada como a exceção anterior vazaria a abstração? Caso contrário, seria adequado simplesmente reutilizar a mensagem da exceção anterior? Se houvesse vazamento da abstração, você poderia fornecer algumas orientações sobre por que acha que isso acontece?
Apenas para esclarecer, minha pergunta envolveria a alteração para a seguinte linha de código
throw new DoohickeyDisasterException($Exc->getMessage(), null, $Exc);
file_not_found
, ele deve lançar umfile_not_found_exception
. Exceções não devem ser específicas da biblioteca.