Saya terjebak dalam memutuskan bagaimana menangani pengecualian dalam aplikasi saya.
Banyak jika masalah saya dengan pengecualian berasal dari 1) mengakses data melalui layanan jarak jauh atau 2) deserialisasi objek JSON. Sayangnya saya tidak dapat menjamin keberhasilan untuk salah satu tugas ini (koneksi jaringan terputus, objek JSON rusak yang di luar kendali saya).
Akibatnya, jika saya menemukan pengecualian, saya hanya menangkapnya di dalam fungsi dan mengembalikan FALSE ke pemanggil. Logika saya adalah bahwa semua penelepon benar-benar peduli adalah jika tugas itu berhasil, bukan mengapa itu tidak berhasil.
Berikut beberapa kode contoh (dalam JAWA) dari metode umum)
public boolean doSomething(Object p_somthingToDoOn)
{
boolean result = false;
try{
// if dirty object then clean
doactualStuffOnObject(p_jsonObject);
//assume success (no exception thrown)
result = true;
}
catch(Exception Ex)
{
//don't care about exceptions
Ex.printStackTrace();
}
return result;
}
Saya pikir pendekatan ini baik-baik saja, tetapi saya benar-benar ingin tahu apa praktik terbaik untuk mengelola pengecualian (haruskah saya benar-benar membuat pengecualian sepanjang tumpukan panggilan?).
Ringkasan pertanyaan kunci:
- Bolehkah hanya menangkap pengecualian tetapi tidak melembungkannya atau memberi tahu sistem secara resmi (baik melalui log atau pemberitahuan kepada pengguna)?
- Praktik terbaik apa yang tersedia untuk pengecualian yang tidak mengakibatkan semua yang memerlukan blok coba / tangkap?
Tindak Lanjut / Edit
Terima kasih atas semua umpan baliknya, temukan beberapa sumber bagus tentang manajemen pengecualian online:
- Praktik Terbaik untuk Penanganan Pengecualian | O'Reilly Media
- Pengecualian Penanganan Praktik Terbaik di .NET
- Praktik Terbaik: Manajemen Pengecualian (Artikel sekarang mengarah ke salinan archive.org)
- Antipattern Penanganan Pengecualian
Tampaknya manajemen pengecualian adalah salah satu hal yang bervariasi berdasarkan konteks. Tetapi yang paling penting, seseorang harus konsisten dalam cara mereka mengelola pengecualian dalam suatu sistem.
Selain itu hati-hati terhadap pembusukan kode melalui percobaan / tangkapan yang berlebihan atau tidak memberikan pengecualian rasa hormatnya (pengecualian memperingatkan sistem, apa lagi yang perlu diperingatkan?).
Juga, ini adalah komentar pilihan cantik dari m3rLinEz .
Saya cenderung setuju dengan Anders Hejlsberg dan Anda bahwa sebagian besar penelepon hanya peduli jika operasi berhasil atau tidak.
Dari komentar ini muncul beberapa pertanyaan untuk dipikirkan ketika berhadapan dengan pengecualian:
- Apa gunanya pengecualian ini dilemparkan?
- Bagaimana masuk akal untuk menanganinya?
- Apakah penelepon benar-benar peduli dengan pengecualian atau apakah mereka hanya peduli jika panggilan berhasil?
- Apakah memaksa penelepon untuk mengelola potensi pengecualian itu anggun?
- Apakah Anda menghormati idom bahasa tersebut?
- Apakah Anda benar-benar perlu mengembalikan bendera sukses seperti boolean? Mengembalikan boolean (atau int) lebih merupakan pola pikir C daripada Java (di Java Anda hanya akan menangani pengecualian).
- Ikuti konstruksi manajemen kesalahan yang terkait dengan bahasa :)!