Ho un metodo di interfaccia che afferma nella documentazione che genererà un tipo specifico di eccezione. Un'implementazione di quel metodo usa qualcosa che genera un'eccezione. Viene rilevata l'eccezione interna e viene generata l'eccezione dichiarata dal contratto di interfaccia. Ecco un piccolo esempio di codice per spiegare meglio. È scritto in PHP ma è piuttosto semplice da seguire.
// 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
}
Sto usando questo metodo nel tentativo di evitare perdite dall'astrazione.
Le mie domande sono: passare l'eccezione interna generata come la precedente eccezione perderebbe l'astrazione? In caso contrario, sarebbe opportuno semplicemente riutilizzare il messaggio dell'eccezione precedente? Se perdesse l'astrazione potresti fornire qualche guida sul perché pensi che lo faccia?
Giusto per chiarire, la mia domanda implicherebbe il passaggio alla seguente riga di codice
throw new DoohickeyDisasterException($Exc->getMessage(), null, $Exc);
file_not_found
, allora dovrebbe lanciare afile_not_found_exception
. Le eccezioni non dovrebbero essere specifiche della libreria.