Saya telah membaca saran tentang pertanyaan ini tentang bagaimana pengecualian harus ditangani sedekat mungkin dengan tempat diajukannya.
Dilema saya pada praktik terbaik adalah apakah seseorang harus menggunakan try / catch / akhirnya untuk mengembalikan enum (atau int yang mewakili nilai, 0 untuk kesalahan, 1 untuk ok, 2 untuk peringatan dll, tergantung pada kasus) sehingga jawaban selalu dalam urutan, atau haruskah seseorang membiarkan pengecualian melewati sehingga bagian yang memanggil akan menghadapinya?
Dari apa yang bisa saya kumpulkan, ini mungkin berbeda tergantung pada kasusnya, sehingga saran aslinya tampak aneh.
Misalnya, pada layanan web, Anda selalu ingin mengembalikan keadaan, jadi pengecualian apa pun harus ditangani saat itu juga, tetapi katakanlah di dalam fungsi yang memposting / mendapatkan beberapa data melalui http, Anda ingin pengecualian (misalnya dalam kasus 404) hanya melewati yang memecatnya. Jika tidak, Anda harus membuat beberapa cara untuk menginformasikan bagian panggilan dari kualitas hasil (kesalahan: 404), serta hasilnya sendiri.
Meskipun dimungkinkan untuk mencoba menangkap 404 pengecualian di dalam fungsi helper yang mendapat / memposting data, bukan? Apakah hanya saya yang menggunakan smallint untuk menunjukkan status dalam program (dan mendokumentasikannya dengan tepat tentu saja), dan kemudian menggunakan info ini untuk keperluan validasi kewarasan (semuanya ok / penanganan kesalahan) di luar?
Pembaruan: Saya mengharapkan pengecualian fatal / non-fatal untuk klasifikasi utama, tetapi saya tidak ingin memasukkan ini agar tidak mengurangi jawaban. Izinkan saya mengklarifikasi apa pertanyaannya: Menangani pengecualian yang dilemparkan, bukan melempar pengecualian. Apa efek yang diinginkan: Mendeteksi kesalahan, dan mencoba memulihkannya. Jika pemulihan tidak memungkinkan, berikan umpan balik yang paling berarti.
Sekali lagi, dengan contoh http get / post, pertanyaannya adalah, haruskah Anda memberikan objek baru yang menjelaskan apa yang terjadi pada penelepon asli? Jika pembantu ini ada di perpustakaan yang Anda gunakan, apakah Anda mengharapkannya memberi Anda kode status untuk operasi, atau akankah Anda memasukkannya dalam blok coba-coba? Jika Anda mendesainnya , apakah Anda akan memberikan kode status atau melemparkan pengecualian dan membiarkan tingkat atas menerjemahkannya ke kode status / pesan?
Sinopsis: Bagaimana Anda memilih jika sepotong kode alih-alih menghasilkan pengecualian, mengembalikan kode status bersama dengan hasil apa pun yang dapat dihasilkannya?