J'ai une méthode d'interface qui indique dans la documentation qu'elle lèvera un type spécifique d'exception. Une implémentation de cette méthode utilise quelque chose qui lève une exception. L'exception interne est interceptée et l'exception déclarée par le contrat d'interface est levée. Voici un petit exemple de code pour mieux expliquer. Il est écrit en PHP mais est assez simple à suivre.
// 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
}
J'utilise cette méthode pour empêcher l'abstraction de fuir.
Mes questions sont les suivantes: le fait de passer l'exception interne levée comme l'exception précédente entraînerait-il une fuite dans l'abstraction? Sinon, serait-il approprié de simplement réutiliser le message de l'exception précédente? En cas de fuite de l'abstraction, pourriez-vous nous expliquer pourquoi vous pensez que c'est le cas?
Juste pour clarifier, ma question impliquerait de passer à la ligne de code suivante
throw new DoohickeyDisasterException($Exc->getMessage(), null, $Exc);
file_not_found
, alors il devrait lancer unfile_not_found_exception
. Les exceptions ne doivent pas être spécifiques à la bibliothèque.