Tengo un método de interfaz que indica en la documentación que arrojará un tipo específico de excepción. Una implementación de ese método usa algo que arroja una excepción. Se captura la excepción interna y se lanza la excepción declarada por el contrato de interfaz. Aquí hay un pequeño ejemplo de código para explicar mejor. Está escrito en PHP pero es bastante simple 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
}
Estoy usando este método en un intento de evitar que la abstracción se filtre.
Mis preguntas son: ¿Pasar la excepción interna lanzada como la excepción anterior estaría filtrando la abstracción? Si no es así, ¿sería adecuado simplemente reutilizar el mensaje de la excepción anterior? Si se filtrara la abstracción, ¿podría proporcionar alguna guía sobre por qué cree que lo hace?
Solo para aclarar, mi pregunta implicaría cambiar a la siguiente línea de código
throw new DoohickeyDisasterException($Exc->getMessage(), null, $Exc);
file_not_found
, entonces debería arrojar unfile_not_found_exception
. Las excepciones no deben ser específicas de la biblioteca.