Ho un metodo di interfaccia che afferma nella documentazione che genererà un tipo specifico di eccezione. Un'implementazione di tale metodo utilizza 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 impedire all'astrazione di fuoriuscire.
Le mie domande sono: passare l'eccezione interna generata come l'eccezione precedente sta perdendo l'astrazione? In caso contrario, sarebbe opportuno riutilizzare semplicemente il messaggio dell'eccezione precedente? Se dovesse fuoriuscire l'astrazione, potresti fornire alcune indicazioni sul perché pensi che sia così?
Giusto per chiarire, la mia domanda implicherebbe il passaggio alla seguente riga di codice
throw new DoohickeyDisasterException($Exc->getMessage(), null, $Exc);