Saya memiliki metode antarmuka yang menyatakan dalam dokumentasi itu akan membuang jenis pengecualian tertentu. Implementasi metode itu menggunakan sesuatu yang melempar pengecualian. Pengecualian internal ditangkap dan pengecualian yang dinyatakan oleh kontrak antarmuka dilemparkan. Berikut adalah sedikit contoh kode untuk menjelaskan dengan lebih baik. Itu ditulis dalam PHP tetapi cukup sederhana untuk diikuti.
// 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
}
Saya menggunakan metode ini dalam upaya untuk mencegah abstraksi bocor.
Pertanyaan saya adalah: Apakah melewatkan pengecualian internal yang dilemparkan sebagai pengecualian sebelumnya akan membocorkan abstraksi? Jika tidak, apakah cocok menggunakan kembali pesan pengecualian sebelumnya? Jika itu akan bocor abstraksi dapatkah Anda memberikan beberapa petunjuk mengapa Anda berpikir demikian?
Hanya untuk memperjelas, pertanyaan saya akan melibatkan perubahan ke baris kode berikut
throw new DoohickeyDisasterException($Exc->getMessage(), null, $Exc);
file_not_found
, maka ia harus membuang afile_not_found_exception
. Pengecualian tidak boleh khusus perpustakaan.