Mam metodę interfejsu, która stwierdza w dokumentacji, że wygeneruje określony typ wyjątku. Implementacja tej metody wykorzystuje wyjątek. Wychwytywany jest wyjątek wewnętrzny i zgłaszany jest wyjątek zgłoszony w umowie interfejsu. Oto mały przykład kodu, aby lepiej wyjaśnić. Jest napisany w PHP, ale jest dość prosty do naśladowania.
// 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
}
Używam tej metody, aby zapobiec wyciekaniu abstrakcji.
Moje pytania brzmią: czy przekazanie zgłoszonego wyjątku wewnętrznego jako poprzedniego wyjątku przeciekałoby abstrakcję? Jeśli nie, czy byłoby po prostu ponownie użyć komunikatu z poprzedniego wyjątku? Jeśli byłoby to nieszczelne, czy mógłbyś podać jakieś wskazówki, dlaczego tak myślisz?
Aby wyjaśnić, moje pytanie wymagałoby przejścia do następującego wiersza kodu
throw new DoohickeyDisasterException($Exc->getMessage(), null, $Exc);
file_not_found
, to powinien wyrzucićfile_not_found_exception
. Wyjątki nie powinny być specyficzne dla biblioteki.