Praktik atau rekomendasi penanganan pengecualian terbaik? [Tutup]

12

Saya pikir dua masalah utama dengan program saya adalah struktur kode / organisasi saya dan penanganan kesalahan saya. Saya membaca Kode Lengkap 2, tetapi saya perlu membaca sesuatu untuk mengatasi masalah potensial.

Misalnya, di situs web, jika sesuatu hanya dapat terjadi jika pengguna merusak data melalui javascript, apakah Anda menulis untuk itu? Juga, kapan Anda tidak menemukan kesalahan? Ketika Anda menulis kelas yang mengharapkan string dan int sebagai input, dan mereka bukan string dan int, apakah Anda memeriksanya, atau apakah Anda membiarkannya menggelembung ke metode pemanggilan yang melewati parameter yang salah?

Saya tahu ini adalah topik luas yang tidak dapat dijawab dalam satu jawaban di sini, jadi yang saya cari adalah buku atau sumber yang umum diterima sebagai pengajaran praktik penanganan pengecualian yang tepat.

mowwwalker
sumber
1
bahasa dan platform pengembangan apa yang Anda gunakan?
Yusubov
1
Saya pikir "Kode bersih" memiliki bab yang bagus tentang masalah ini
Hoa Long
Apa yang dikatakan @ElYusubov. Detail implementasi dan standar bahasa / platform yang Anda hadapi memiliki banyak pengaruh atas praktik terbaik.
vaughandroid

Jawaban:

12

Salah satu hal yang baik untuk diingat adalah melakukan penanganan pengecualian when there is a need.

Untuk platform pengembangan .NET, cukup ikuti panduan MSDN - Praktik Terbaik untuk Menangani Pengecualian , serta periksa artikel proyek-proyek yang bagus ini - Praktik Terbaik Penanganan Pengecualian di .NET

Namun, pedoman berikut sebagian besar berlaku untuk platform pengembangan apa pun:

  • Jangan kelola logika bisnis dengan pengecualian. Gunakan pernyataan bersyarat sebagai gantinya. Jika kontrol dapat dilakukan dengan pernyataan if-else dengan jelas, jangan gunakan pengecualian karena ini mengurangi keterbacaan dan kinerja (misalnya kontrol nol, bagi dengan kontrol nol). .

  • Nama pengecualian harus jelas dan bermakna, yang menyatakan penyebab pengecualian.

  • Lempar pengecualian untuk kondisi kesalahan saat menerapkan metode. Misalnya jika Anda mengembalikan nilai -1, -2, -3 dll, bukan FileNotFoundException, metode itu tidak dapat dipahami.

  • Tangkap pengecualian spesifik, bukan kelas Pengecualian atas. Ini akan membawa kinerja tambahan, keterbacaan dan penanganan pengecualian yang lebih spesifik.

  • Kontrol Null dengan conditional bukan merupakan alternatif untuk menangkap NullPointerException. Jika suatu metode dapat mengembalikan nol, kendalikan dengan pernyataan if-else. Jika pengembalian dapat melempar NullPointerException, tangkap.

  • Usahakan untuk tidak melemparkan kembali pengecualian karena harganya. Namun jika melempar kembali merupakan keharusan, melemparkan kembali pengecualian yang sama alih-alih membuat pengecualian baru. Ini akan membawa kinerja tambahan. Anda dapat menambahkan info tambahan di setiap layer ke pengecualian itu.

  • Tentukan hierarki pengecualian Anda sendiri dengan memperluas kelas Pengecualian saat ini (mis. UserException, SystemException dan sub tipe mereka) dan menggunakannya. Dengan melakukan ini, Anda dapat mengkhususkan pengecualian dan menentukan modul / lapisan pengecualian yang dapat digunakan kembali. lebih banyak untuk mengikuti di tautan ini

Yusubov
sumber
2
Beberapa poin umum yang baik, meskipun saya tidak berpikir poin ke 5 Anda ("Kontrol kosong dengan persyaratan ...") sangat jelas.
vaughandroid