Saya telah merenungkan masalah ini untuk sementara waktu sekarang dan menemukan diri saya terus menemukan peringatan dan kontradiksi, jadi saya berharap seseorang dapat menghasilkan kesimpulan sebagai berikut:
Mendukung pengecualian atas kode kesalahan
Sejauh yang saya ketahui, dari bekerja di industri selama empat tahun, membaca buku dan blog, dll. Praktik terbaik saat ini untuk menangani kesalahan adalah dengan melemparkan pengecualian, daripada mengembalikan kode kesalahan (tidak harus kode kesalahan, tetapi tipe mewakili kesalahan).
Tapi - bagi saya ini tampaknya bertentangan ...
Pengodean ke antarmuka, bukan implementasi
Kami mengkode ke antarmuka atau abstraksi untuk mengurangi kopling. Kami tidak tahu, atau ingin tahu, tipe spesifik dan implementasi antarmuka. Jadi bagaimana kita bisa tahu pengecualian apa yang harus kita tangkap? Implementasinya bisa melempar 10 pengecualian berbeda, atau bisa melempar tidak ada. Ketika kita menangkap pengecualian tentu kita membuat asumsi tentang implementasi?
Kecuali - antarmuka memiliki ...
Spesifikasi pengecualian
Beberapa bahasa memungkinkan pengembang untuk menyatakan bahwa metode tertentu melempar pengecualian tertentu (Java misalnya, menggunakan throws
kata kunci.) Dari sudut pandang kode panggilan ini tampak baik - kita tahu secara eksplisit pengecualian mana yang mungkin perlu kita tangkap.
Tapi - ini sepertinya menyarankan ...
Abstraksi bocor
Mengapa antarmuka harus menentukan pengecualian yang dapat dilemparkan? Bagaimana jika implementasinya tidak perlu melempar pengecualian, atau perlu melempar pengecualian lain? Tidak ada cara, pada tingkat antarmuka, untuk mengetahui pengecualian mana yang mungkin ingin diterapkan oleh suatu implementasi.
Begitu...
Untuk menyimpulkan
Mengapa pengecualian lebih disukai ketika mereka (di mata saya) bertentangan dengan praktik terbaik perangkat lunak? Dan, jika kode kesalahan sangat buruk (dan saya tidak perlu dijual berdasarkan sifat buruk dari kode kesalahan), apakah ada alternatif lain? Bagaimana keadaan saat ini (atau segera menjadi) seni untuk penanganan kesalahan yang memenuhi persyaratan praktik terbaik seperti diuraikan di atas, tetapi tidak bergantung pada kode panggilan memeriksa nilai kembali kode kesalahan?