Ich habe eine Schnittstellenmethode, die in der Dokumentation angibt, dass eine bestimmte Art von Ausnahme ausgelöst wird. Eine Implementierung dieser Methode verwendet etwas, das eine Ausnahme auslöst. Die interne Ausnahme wird abgefangen und die vom Schnittstellenvertrag deklarierte Ausnahme wird ausgelöst. Hier ist ein kleines Codebeispiel zur besseren Erklärung. Es ist in PHP geschrieben, aber es ist ziemlich einfach zu befolgen.
// 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
}
Ich benutze diese Methode, um zu verhindern, dass die Abstraktion austritt.
Meine Fragen sind: Würde die Weitergabe der ausgelösten internen Ausnahme als vorherige Ausnahme die Abstraktion lecken? Wenn nicht, wäre es angemessen, die Nachricht der vorherigen Ausnahme einfach wiederzuverwenden? Wenn die Abstraktion undicht wäre, könnten Sie eine Anleitung geben, warum Sie glauben, dass dies der Fall ist?
Zur Verdeutlichung würde meine Frage den Wechsel zur folgenden Codezeile beinhalten
throw new DoohickeyDisasterException($Exc->getMessage(), null, $Exc);
file_not_found
, sollte er ein werfenfile_not_found_exception
. Ausnahmen sollten nicht bibliotheksspezifisch sein.